UniWebView2:适用于Andriod、iOS和Mac os,在移动端效果最好。支持WP8,不支持windows桌面系统,包括编辑器状态。  Unity4.x版本是 UniWebView

Unity AssetStore 上的插件: https://www.assetstore.unity3d.com/en/#!/content/32461        

             在Unity中主要用于活动,就像《阴阳师》  手游

泰课在线

 

 

开发有些不方便,因为不支持window下的 Editor的调试!,  只能在Mac下!

 

使用的主要思路

     插件的 官网 ;   http://uniwebview.onevcat.com/
下载插件然后安装导入 Unity 
使用 Prefab 和设置 URL .

        从 UniWebView/Prefab 文件夹下 拖拽 UniWebViewObject  预制体,在Inspector 上设置 URL(在Windows上也设置不了), Mac 上Play就可以看到效果, 但是在Window上要打包成移动包才行。

         泰课在线

 

UniWebView的工作方式

 

          在Mac 系统下可以设置 UniWebView组件上的:  Insets 能控制 web 视图的大小。Start函数中加载(Load On Start )和加载完成时自动显示(Auto Show WhenLoad Complete )。

 

       除了显示 web 页面的基本用法,UniWebView 有一些其他重要的功能、 与Unity场景通信, 侦听 web 页event事件和计算一些 JavaScript

 

 

通过脚本设置  UniWebView  加载Web 内容并显示:

       假设, 你在 UniWebView.cs  脚本的所在对象上有一个脚本,  其中定义了字段:

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. private UniWebView _webView;  

    你可以通过这样的方式 得到 引用:

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. var _webView = gameObject.GetComponent<UniWebView>();  

       // 监听事件

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. _webView.OnLoadComplete += OnLoadComplete;  
  2. _webView.OnReceivedMessage += OnReceivedMessage;  
  3. _webView.OnEvalJavaScriptFinished +=OnEvalJavaScriptFinished;  

            然后  设置 Web 页面的大小  和你 想要加载页面的Url :

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. _webView.insets = newUniWebViewEdgeInsets(5,5,5,5);    // 距离全屏差5个像素  
  2. _webView.url = "http://uniwebview.onevcat.com/demo/index.html";  

             设置完成后,收到调用加载 页面 :

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. _webView.Load();  

           页面加载成功或者失败的  完成回调函数大致如下:

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. voidOnLoadComplete(UniWebView webView, bool success, string errorMessage) {  
  2.  if (success) {  
  3.     //  显示 加载完成的界面  
  4.    webView.Show();  
  5.   } else {  
  6.     //   输出 错误码  
  7.    Debug.LogError("Something wrong in webview loading: " + errorMessage);  
  8.   }  
  9. }  

如果 不想监听(其实是不处理失败检测)和自己处理这个 OnLoadComplete  事件,可以 设置属性:        你好像也可以 先调用 Show()  函数,然后在调用 Load(), 函数。

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. autoShowWhenLoadComplete  =  true;  

Web页面和Unity游戏逻辑的通信

一、UniWebView发送消息给 Unity

          这个建议使用 url  方案。UniWebView 将监听 以  uniwebview:// 开始 的 url

如果玩家在 Web 页面点击了 Url 链接, UniWebView 将会解析为一个 UniWebViewMessage  对象  ,然后引发 OnReceivedMessage 事件。   一个 UniWebViewMessage 对象包含 一个路径字符串(其中有url 和args 参数字典)。

           例如当点击了链接 :  uniwebview://move?direction=up&distance=1

  将被解析为:

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. path = "move"  
  2. args = {  
  3.     direction ="up",  
  4.     distance ="1"  
  5. }  

你在 监听了 OnReceivedMessage 事件 的回调中, 会得到 UniWebViewMessage对象,然后实现自己的逻辑: (自己注:  在游戏中我们通常点击了活动的每个标签或者 Button可能是页面切换,可能是Button的网络请求,  都可以以这种方式来弄!  如果是C#写逻辑,那不就没有了一些热更新的优势了???)

[csharp] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. voidOnReceivedMessage(UniWebView webView, UniWebViewMessage message) {  
  2.   Debug.Log(message.rawMessage);  
  3.    if (string.Equals(message.path,"move")) {  
  4.       // It is time to move!  
  5.