最新文�? 第52章二次型解释4_连续的解释,用到纤维丛 第53章_二次型解释5_连续的解释2,稍微利用一下同伦群和同调 第54章_曲面论1,部分数学名词解释 第55章_张量1_代数理论1 第56章_张量2_形变张量,应力张量,迷向张量
转载 : Unity 移动端内置网页浏览插件:UniWebView 历史版本:
上次修改时间:

引用自

转载 : Unity 移动端内置网页浏览插件:UniWebView

Unity 移动端内置网页浏览插件:UniWebView

转载:Unity 移动端内置网页浏览插件:UniWebView-CSDN博客

文章目录
Unity 移动端内置网页浏览插件:UniWebView.v4
前言
一、插件内置预制体Prefab介绍
1.UniWebView
1- UrlOnStart
2- ShowOnStart
3- FullScreen
4- UseToolbar
5- ToolbarPosition
6- Fram
7-ReferenceRectTransform
2.UniWebViewSafeBrowsing
1-Url
二、主要事件使用
1.OnPageStarted
2.OnPageFinished
3.OnPageProgressChanged
4.OnPageErrorReceived
5.OnShouldClose
三、主要方法使用
1.void Load(string url, bool skipEncoding, string readAccessURL)
2.void ReLoad()
3.void GoBack()
3.void GoForward()
4.Rect Frame { get; set; }
void CleanCache()
void SetHorizontalScrollBarEnabled(bool enabled)
void SetVerticalScrollBarEnabled(bool enabled)
void SetZoomEnabled(bool enabled)
实践UniWebView与UI结合展示
1UI搭建
2.挂载脚本
3.UniWebView设置
前言
UniWebView官方文档:官方文档连接

UniWebView 包含一组 C# 的高层级 API,它对 iOS 和 Android 平台的本机 API 进行了抽象封装。使用 UniWebView,您可以在无需了解本机开发的任何内容的情况下,就将浏览器行为添加到游戏中。当您需要显示活动公告及通知,或为玩家排名添加排行板,或是向用户显示任何网页内容时,UniWebView 都可以帮助您轻松解决问题。

功能列表

网页内容浏览

HTTP 和 HTTPS 页面
本地文件
呈现和解雇
大小和位置
加载事件
安全浏览模式 
1
2
3
4
5
6
与网页交互

内置工具栏
完整的 JavaScript 支持
消息系统 
1
2
3
其他任务

视频,内嵌或全屏
图像挑选和上传
用户代理和 Cookie
允许点击通过
完整的日志和调试 
1
2
3
4
5
以及更多。 请查看 完整的 API 参考 。

支持的平台

UniWebView v4 支持运行于:

Unity 2019.4 或更高
iOS 9.0 或以上
Android 5.0 (API Level 21) 或以上 
1
2
3
本次使用的是v4版本,不同版本所适应的平台版本也不一样,请注意所使用的插件版本。

一、插件内置预制体Prefab介绍
1.UniWebView


1- UrlOnStart
1-该变量负责接收目标网页地址,想要访问目标网页则必须在此接收网站地址,其变量会在UniWebView的Start()方法中加载url。
2-主要在网站地址前要加http://或者https://,如果不加则会访问不到网页。

2- ShowOnStart
1-勾选了该bool变量则会在程序运行时进行网页显示。
2-没有勾选则需要手动调用Show()方法进行网页加载显示。

3- FullScreen
1-全屏展示,勾选上的话会忽略Frame 和 Reference Rect Transform的设置

4- UseToolbar
1-仅适用于 iOS 和 macOS 编辑器。 通过打开此选项,包含返回按钮、前进按钮和完成按钮(仅限 iOS)的工具栏将与 Web 视图一起显示。 您的用户可以使用此工具栏来导航和关闭 Web 视图。 在Android上,用户可以使用导航栏中的返回按钮来进行“返回”和“关闭”操作,因此不需要为Android提供工具栏。

5- ToolbarPosition
1-此选项有两个值,一个Top,一个Bottom。此功能也是针对ios和macos有用

6- Fram
1-设置网页视图的矩形框值。 它是一个 Rect这表明 web 视图的原点及其大小为: {x, y, width, height}. 如果无论屏幕大小如何都需要固定大小的 Web 视图,您可以取消选中“全屏”选项,将“参考矩形变换”保留为 null并改为设置“框架”。
2-此原点为左上角为(0,0)原点

7-ReferenceRectTransform
1-UniWebView 可以指一个 RectTransform并更改 Web 视图大小以遵循该转换。 ,这将非常有用 Unity UI (打开新窗口) 具有 多种分辨率 (打开新窗口) 支持。 您可以只创建一个 UI 元素(如 Panel) 在您的 Canvas 下,让它确定您的 Web 视图的位置和大小。 与“全屏”选项类似,设置“参考矩形变换”将使“框架”选项被忽略。

2.UniWebViewSafeBrowsing


1-Url
1-输入目标网站地址,并将场景构建到设备上。 将显示具有默认标题和工具栏 UI 的网页

二、主要事件使用
1.OnPageStarted
代码如下(示例):

m_UniWebView.OnPageStarted += (UniWebView webView, string url) =>
        {
            m_UniWebView.Hide();
            m_State.text = "Loading...";
        };

1
2
3
4
5
6
参数:
UniWebView webView
引发此事件的webView组件

string url
webView即将加载的url

当 web 视图开始加载 url 时引发。其Lamda表达式中.Hide()方法则为隐藏网页。

2.OnPageFinished
代码如下(示例):

m_UniWebView.OnPageFinished += (UniWebView webView, int Code, string url) =>
        {
            m_UniWebView.Show();
            m_State.text = "Finish!!!";
        };
1
2
3
4
5
参数:
UniWebView webView
引发此事件的webView组件

int Code
从响应中收到的HTTP状态代码

string url
webView即将加载的url

当 Web 视图完成以成功加载 url 时引发。当从 URL 接收到有效响应时,将调用此方法,无论响应状态如何。 如果 URL 在到达服务器并获得响应之前加载失败, OnPageErrorReceived将会 改为提出。

3.OnPageProgressChanged
代码如下(示例):

m_UniWebView.OnPageProgressChanged += (UniWebView view, float progress) => {
    Debug.Log("Progress: " + progress);
};
1
2
3
参数:
UniWebView webView
引发此事件的webView组件

float progress
表示当前页面的加载进度。 它是一个介于 0.0f 和 1.0f 之间的值。

当当前 Web 视图中的加载进度值更改时引发。

4.OnPageErrorReceived
代码如下(示例):

m_UniWebView.OnPageErrorReceived += (UniWebView webView, int errorCode, string errorMessage) =>
        {
            m_State.text = "Error:" + errorCode;
        };
1
2
3
4
参数:
UniWebView webView
引发此事件的webView组件

int errorCode
指示错误类型的错误代码。 它可以不同于系统和平台。

string errorMessage
描述错误详细信息的错误消息。

在加载过程中遇到错误时引发。 如“找不到主机”错误或“没有互联网连接”错误会引发此事件。

5.OnShouldClose
代码如下(示例):

 m_UniWebView.OnShouldClose += (UniWebView webview) =>
        { 
            m_UniWebView = null; 
            return true;
        };
1
2
3
4
5
参数:
UniWebView webView
引发此事件的webView组件

当Web视图即将自行关闭时引发,当用户通过Android上的后退按钮关闭Web视图事会引发此事件,ios上的完成按钮或者macosUnity编辑器上的关闭按钮。在此事件内可以最终决定是否关闭和销毁Web视图,同时也可以清洁在此事件中创建的所有相关资源。

三、主要方法使用
1.void Load(string url, bool skipEncoding, string readAccessURL)
代码如下(示例):

// Load a URL.
webView.Load("https://example.com");

// Load a URL which is already escaped.
webView.Load("https://example.com?email=support%40uniwebview.com", true);

// Load a local file, with "local_app_folder/root/images/" as its read access path.
var indexURL = UniWebViewHelper.StreamingAssetURLForPath("local_app_folder/root/page/index.html");
var accessURL = UniWebViewHelper.StreamingAssetURLForPath("/local_app_folder/root/images/");
webView.Load(indexURL, false, accessURL);

1
2
3
4
5
6
7
8
9
10
11
参数:
string url
要加载的地址,此网站应以http://或者 https://前缀格式加载网页

bool skipEncoding
UniWebView 是否应该跳过对 url 的编码。 如果设置为 false, UniWebView 会在加载之前尝试对 url 参数进行编码。 否则,如果有效,您的原始 url 字符串将用作 url。 默认为 false.

string readAccessURL
允许读取访问的 URL。 此参数仅在 iOS 中从文件系统加载时使用,并传递给 loadFileURL:allowingReadAccessToURL:WebKit 的方法。 默认情况下,文件夹的父文件夹 url参数将被读取访问。

2.void ReLoad()
if (webView.isActiveAndEnabled)
        {
            m_UniWebView.Reload();
        }
1
2
3
4
重新加载网页,官方文档中并没有判断原始网页是否是开启状态,但是既然要重载,还是要先判断一下当前网页的状态,如果当前网页为空再执行该方法也没有意义。

3.void GoBack()
if (webView.CanGoBack) {
    webView.GoBack();
}

1
2
3
4
导航到后退列表中的后一项。
要先判断一下是否有可以后退的项,有则进行。(最少打开过两个网页)

3.void GoForward()
if (webView.CanGoForward)
        {
            webView.GoForward();
        }
1
2
3
4
导航到后退列表中的前进项目。
要先判断一下是否有可以前进的网页。(最少打开过两个网页)

4.Rect Frame { get; set; }
// Make the web view full screen:
webView.Frame = new Rect(0, 0, Screen.width, Screen.height);

// Make the web view center in the screen with size 500x500:
var side = 500;
var x = (Screen.width - side) / 2.0f;
var y = (Screen.height - side) / 2.0f;
webView.Frame = new Rect(x, y, side, side);

1
2
3
4
5
6
7
8
9
可以用来定义网页窗口位置与大小。前两个参数为位置:x,y,以左上角为原点,后两个参数为屏幕宽高。

void CleanCache()
webView.CleanCache();
1
清理 Web 视图缓存。 这将删除 Web 视图的缓存本地数据。

void SetHorizontalScrollBarEnabled(bool enabled)
webView.SetHorizontalScrollBarEnabled(true);开启
1
设置当 Web 内容超出 Web 视图边界时是否应显示水平滚动条。默认为false状态

void SetVerticalScrollBarEnabled(bool enabled)
webView.SetHorizontalScrollBarEnabled(false);//关闭
1
设置当 Web 内容超出 Web 视图边界时是否应显示垂直滚动条。默认为false状态

void SetZoomEnabled(bool enabled)
webView.SetZoomEnabled(false);//关闭
1
设置网页视图是否支持缩放手势来改变内容大小。默认为false状态

还有很多方法区分平台,例如有些是在ios上能用,有些是在Android,还有些是只能在macos上使用。主要还是以官方文档为准。

实践UniWebView与UI结合展示
1UI搭建

主要UI组件如上图所示,将预制体UniWebView拖拽到场景中。

2.挂载脚本

在Panel上挂载GameStart脚本

脚本内容如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameStart : MonoBehaviour
{
    public UniWebView m_UniWebView;
    public Text m_State;
    public Button m_BaiDuBtn;
    public Button m_YunXuanRanBtn;
    public Button m_CSDNBtn;
    public Button m_CloseBtn;
    public Button m_RefreshBtn;
    public Button m_BackBtn;
    public Button m_ForwardBtn;
    // Use this for initialization
    void Start()
    {
        m_UniWebView.OnPageFinished += (UniWebView webView, int statusCode, string url) =>
        {
            m_UniWebView.Show();
            m_State.text = "Finish!!!";
        };

        m_UniWebView.OnPageStarted += (UniWebView webView, string url) =>
        {
            m_UniWebView.Hide();
            m_State.text = "Loading...";
        };

        m_UniWebView.OnPageErrorReceived += (UniWebView webView, int errorCode, string errorMessage) =>
        {
            m_State.text = "Error:" + errorCode;
        };
        m_UniWebView.OnShouldClose += (UniWebView webview) =>
        { 
            m_UniWebView = null; 
            return true;
        };

        m_BaiDuBtn.onClick.AddListener(() =>
        {
            OpenWeb("https://app.3dcat.live/raystreaming/rayvision/player-normal.html?appKey=4mMc1RymHCbT5gFK");
        });
        m_YunXuanRanBtn.onClick.AddListener(() =>
        {
            OpenWeb("http://chiva.tech/uploads/vtour/tour.html");
        });
        m_CSDNBtn.onClick.AddListener(() =>
        {
            OpenWeb("https://app.3dcat.live/raystreaming/rayvision/player-normal.html?appKey=C4GhPqmAuvgXQ3xb");
        });
        m_CloseBtn.onClick.AddListener(Close);
        m_RefreshBtn.onClick.AddListener(Refresh);
        m_BackBtn.onClick.AddListener(() =>
        {
            if (m_UniWebView.CanGoBack)
            {
                m_UniWebView.GoBack();
            }
            else
            {
                m_UniWebView = null;
            }
        });
        m_ForwardBtn.onClick.AddListener(() =>
        {
            if (m_UniWebView.CanGoForward)
            {
                m_UniWebView.GoForward();
            }
        });
        UniWebViewMethod();
    }
    public void Close()
    {
        m_UniWebView.Hide();
        m_UniWebView.CleanCache();
        m_UniWebView = null;
        //Destroy(m_UniWebView);
    }
    public void Refresh()
    {
        if (m_UniWebView.isActiveAndEnabled)
        {
            m_UniWebView.Reload();
        }
    }
    public void OpenWeb(string _Url)
    {
        if (m_UniWebView ==null)
        {            
            m_UniWebView = GameObject.Find("UniWebView").GetComponent<UniWebView>();
            //m_UniWebView = Resources.Load<GameObject>("UniWebView").GetComponent<UniWebView>();
            //Instantiate(m_UniWebView);
        }        
        m_UniWebView.CleanCache();
        m_UniWebView.Load(_Url);
        
    }
    public void UniWebViewMethod()
    {
        m_UniWebView.Frame = new Rect(500, 500, Screen.width, Screen.height);
        //回退钮  物理按键
        m_UniWebView.SetBackButtonEnabled(true);
        //设置Web视图是否支持缩放权限以更改内容大小。默认不支持缩放(测试没什么用)
        m_UniWebView.SetZoomEnabled(true);
        //设置Web视图是否以概览模式加载页面,即缩小内容以适应屏幕宽度。(测试也没什么用)
        //默认是false,仅仅是安卓端的
        m_UniWebView.SetLoadWithOverviewMode(true);
        //设置当Web内容超出Web视图边界时是否应显示水平滚动条。
        //m_UniWebView.SetHorizontalScrollBarEnabled(true);
        //设置当Web内容超出Web视图边界时是否应显示垂直滚动条。
        //m_UniWebView.SetVerticalScrollBarEnabled(true);
    }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
将Unity中Button都挂载上去。

3.UniWebView设置

将Panel下的BackgroundImage拖拽到ReferenceRectTransform上即可。


原文链接:https://blog.csdn.net/m0_45244541/article/details/126928110

0条评�?
全部评论

关于博主

an actually real engineer

通信工程专业毕业,7年开发经验

技术栈:

精通c/c++

精通golang

熟悉常见的脚本,js,lua,python,php

熟悉电路基础,嵌入式,单片机

耕耘领域:

服务端开发

嵌入式开发

git

>

gin接口代码CURD生成工具

sql ddl to struct and markdown,将sql表自动化生成代码内对应的结构体和markdown表格格式,节省宝贵的时间。

输入ddl:
输出代码:

qt .ui文件转css文件

duilib xml 自动生成绑定控件代码

协议调试器

基于lua虚拟机的的协议调试器软件 支持的协议有:

串口

tcp客户端/服务端

udp 组播/udp节点

tcp websocket 客户端/服务端

软件界面

使用例子: 通过脚本来获得接收到的数据并写入文件和展示在界面上

下载地址和源码

duilib版本源码 qt qml版本源码 二进制包

webrtc easy demo

webrtc c++ native 库 demo 实现功能:

基于QT

webrtc摄像头/桌面捕获功能

opengl渲染/多播放窗格管理

janus meeting room

下载地址和源码

源码 二进制包

wifi,蓝牙 - 无线开关

实现功能:

通过wifi/蓝牙实现远程开关电器或者其他电子设备

电路原理图:

实物图:

深度学习验证工具

vtk+pcl 点云编辑工具

实现功能:

1. 点云文件加载显示(.pcd obj stl)

2. 点云重建

3. 点云三角化

4. 点云缩放

下载地址:

源码 二进制包

虚拟示波器

硬件实物图:

实现原理

基本性能

采集频率: 取决于外部adc模块和ebaz4205矿板的以太网接口速率,最高可以达到100M/8 约为12.5MPS

上位机实现功能: 采集,显示波形,存储wave文件。

参数可运行时配置

上位机:

显示缓冲区大小可调

刷新率可调节

触发显示刷新可调节

进程守护工具

基本功能:

1. 守护进程,被守护程序崩溃后自动重启。

2. 进程输出获取,显示在编辑框中。

二进制包

openblt 烧录工具

基本功能:

1. 加载openblt 文件,下载到具有openblt bootloader 运行的单片机中。

二进制包

opencv 功能验证工具(开源项目二次开发)

基本功能:

1. 插件化图像处理流程,支持自定义图像处理流程。 2. 完善的日志和权限管理

二进制包

又一个modbus调试工具

最近混迹物联网企业,发现目前缺少一个简易可用的modbus调试工具,本软件旨在为开发者提供一个简单modbus测试工具。
主打一个代码简单易修改。
特点:

1. 基于QT5

2. 基于libmodbus

3. 三方库完全跨平台,linux/windows。

二进制包

屏幕录制工具

1. 基于QT5

2. 基于ffmpeg

3. 支持自定义录屏

源代码

开源plutosdr 板卡

1. 完全开源

2. 提高固件定制服务

3. 硬件售价450 手焊产量有线

测试数据

内部DDS回环测试

接收测试

外部发送500MHZ FM波形

硬件原理图

matlab测试

2TRX版本

大部分plutosdr应用场景都是讲plutosdr板卡作为射频收发器来使用。
实际上plutosdr板卡本身运行linux 操作系统。是具有一定脱机运算的能力。 对于一些微型频谱检测,简单射频信号收发等应用完全可以将应用层直接实现在板卡上
相较于通过网卡或者USB口传输具有更稳定,带宽更高等优点。
本开源板卡由于了SD卡启动,较原版pluto支持了自定义启动应用的功能。
提供了应用层开发SDK(编译器,buildroot文件系统)。
通过usb连接电脑,经过RNDIS驱动可以近似为通过网卡连接
(支持固件的开发定制)。

二次开发例子

``` all:
arm-linux-gnueabihf-gcc -mfloat-abi=hard --sysroot=/root/v0.32_2trx/buildroot/output/staging -std=gnu99 -g -o pluto_stream ad9361-iiostream.c -lpthread -liio -lm -Wall -Wextra -lrt
clean:
rm pluto_stream

bsdiff算法补丁生成器

1. 官方bsdiff算法例子自带bzip压缩方式

2. 本例子没有压缩,直接生成补丁文件

3. 图形化界面基于DUILIB

二进制文件

版面分析即分析出图片内的具体文件元素,如文档标题,文档内容,文档页码等,本工具基于cnstd模型

Base64 Image

. 闽ICP备19002644号