最新文章
泰课在线 | 微信拼团成功后如何获取课程?
08-09 17:57
Unity教程 | 使用ARKit为iOS开发AR应用
07-31 17:23
Unity Pro专业版7折订阅四选一工具包之VR开发与艺术设计
07-28 11:47
网友使用虚幻UE4实现CAVE 多通道立体渲染的沉浸式环境
07-27 11:57
VR晕动症调查:未来5年内大部分VR晕动症将得到解决
07-27 11:26
AMD CEO:未来3-5年最重要 希望5年达1亿VR用户
07-27 10:44
Unity中内嵌网页插件 UniWebView 2.8使用
一、插件概述
UniWebView 2 是一款适用于 Android、iOS 和 Mac OS 的插件,在移动端使用效果最佳。它支持 WP8,但不支持 Windows 桌面系统,包括在编辑器状态下也无法使用。该插件适用于 Unity 4.x 版本,可在 Unity Asset Store 上获取,链接为:https://www.assetstore.unity3d.com/en/#!/content/32461。在 Unity 开发中,它主要用于实现活动功能,例如《阴阳师》手游就可能使用了该插件。不过,该插件的开发存在一定不便,由于不支持 Windows 下的 Editor 调试,开发者只能在 Mac 系统下进行调试。
二、使用思路
1. 下载与安装
插件的官网为:http://uniwebview.onevcat.com/。开发者需先从官网下载插件,然后将其安装并导入到 Unity 项目中。
2. 预制体与 URL 设置
从 UniWebView/Prefab 文件夹下拖拽 UniWebViewObject 预制体到场景中。在 Inspector 面板上设置 URL,但需要注意的是,在 Windows 系统上无法进行此设置。在 Mac 系统上,点击 Play 即可看到效果;而在 Windows 系统上,则需要将项目打包成移动包才能看到效果。
三、UniWebView 的工作方式
1. 组件设置
在 Mac 系统下,可以对 UniWebView 组件进行如下设置:
Insets:用于控制 Web 视图的大小。Load On Start:可在 Start 函数中加载页面。Auto Show WhenLoad Complete:页面加载完成时自动显示。
2. 其他重要功能
除了显示 Web 页面的基本功能外,UniWebView 还具备一些其他重要功能,如与 Unity 场景通信、侦听 Web 页事件以及执行 JavaScript 计算等。
3. 通过脚本加载并显示 Web 内容
假设在 UniWebView.cs 脚本所在的对象上有一个脚本,其中定义了如下字段:
private UniWebView _webView;
可以通过以下方式获取引用:
var _webView = gameObject.GetComponent<UniWebView>();
监听事件:
_webView.OnLoadComplete += OnLoadComplete;
_webView.OnReceivedMessage += OnReceivedMessage;
_webView.OnEvalJavaScriptFinished += OnEvalJavaScriptFinished;
设置 Web 页面的大小和要加载页面的 URL:
_webView.insets = new UniWebViewEdgeInsets(5, 5, 5, 5); // 距离全屏差 5 个像素
_webView.url = "http://uniwebview.onevcat.com/demo/index.html";
设置完成后,调用加载页面的函数:
_webView.Load();
页面加载成功或者失败的完成回调函数如下:
void OnLoadComplete(UniWebView webView, bool success, string errorMessage) {
if (success) {
// 显示加载完成的界面
webView.Show();
} else {
// 输出错误码
Debug.LogError("Something wrong in webview loading: " + errorMessage);
}
}
如果不想监听(即不处理失败检测)和自己处理 OnLoadComplete 事件,可以设置属性:
autoShowWhenLoadComplete = true;
此外,也可以先调用 Show() 函数,然后再调用 Load() 函数。
四、Web 页面和 Unity 游戏逻辑的通信
1. UniWebView 发送消息给 Unity
建议使用 URL 方案。UniWebView 将监听以 uniwebview:// 开始的 URL。如果玩家在 Web 页面点击了以该方案开头的 URL 链接,UniWebView 将会将其解析为一个 UniWebViewMessage 对象,并引发 OnReceivedMessage 事件。一个 UniWebViewMessage 对象包含一个路径字符串(其中包含 URL 和 args 参数字典)。
例如,当点击了链接 uniwebview://move?direction=up&distance=1,将被解析为:
path = "move";
args = {
"direction": "up",
"distance": "1"
};
在监听了 OnReceivedMessage 事件的回调中,会得到 UniWebViewMessage 对象,然后可以实现自己的逻辑:
void OnReceivedMessage(UniWebView webView, UniWebViewMessage message) {
Debug.Log(message.rawMessage);
if (string.Equals(message.path, "move")) {
// 实现自己的逻辑
}
}
(注:在游戏中,通常点击活动的每个标签或者 Button 时,可能涉及页面切换或 Button 的网络请求,都可以通过这种方式实现。不过,如果使用 C# 写逻辑,可能会失去一些热更新的优势。)