Unity插件学习(四) ------ 内嵌网页UniWebView

一.Unity加载网页实现方式

  1. UnityWebCore:只支持Windows平台,调用浏览器内核,将网页渲染到mesh,作为gameObject。
  2. Unity-Webview:只适用于Andriod和ios平台,调用移动平台的Webview。
    参考链接:http://www.xuanyusong.com/archives/1418
  3. UniWebView插件 : 适用于Andriod、ios和Mac os,只能打包出来查看效果
    官方网址 : https://docs.uniwebview.com/guide/
    插件下载链接:https://download.csdn.net/download/dengshunhao/10741580

二.使用总结

官方介绍了使用预制体和代码加载网页,其实原理是一样的
代码总结如下:

 public void load(string uri)
    {
        UniWebView uniWebView = CreateWebView();
        uniWebView.transform.parent = transform;
        uniWebView.Frame = new Rect(0, 0, Screen.width, Screen.height);
        uniWebView.Load(uri);
        uniWebView.Show();

        uniWebView.OnPageFinished += _webView_OnPageFinished;
        uniWebView.OnMessageReceived += _webView_OnMessageReceived;
        uniWebView.OnPageErrorReceived += _view_OnPageErrorReceived; ;
        uniWebView.OnShouldClose += _view_OnShouldClose;
    }
    //网页加载出错
    private void _view_OnPageErrorReceived(UniWebView webView, int errorCode, string errorMessage)
    {
        Debug.Log("网页加载出错:" + errorMessage);
    }

    //接收到网页事件消息
    private void _webView_OnMessageReceived(UniWebView webView, UniWebViewMessage message)
    {
        Debug.Log("接收到信息:" + message.Path);

        switch (message.Path)
        {
            case "close":
                Destroy(webView.gameObject);
                webView.CleanCache();
                break;
        }
    }

    /// 
    /// 向web界面添加js方法
    /// 
    /// 当前web
    /// js方法名
    /// 传输的特定类型
    /// web传输的json数据
    public void AddScript(UniWebView webView, string js, string type, string data)
    {
        if (webView == null)
        {
            Debug.Log("Please open the web view first.");
            return;
        }
        webView.AddJavaScript(js, (payload) => {
            if (payload.resultCode.Equals("0"))
            {
                Debug.Log("添加成功");
                RunScript(webView, type + "(" + data + "," + js + ");");
            }
            else
            {
                Debug.Log(payload.resultCode);
            }
        });
    }
    //运行web界面js函数
    /// 
    /// 运行web界面js函数
    /// 
    /// 当前web界面
    /// 运行js的相关参数
    public void RunScript(UniWebView webView, string parameter)
    {
        Debug.Log("运行参数:" + parameter);

        webView.EvaluateJavaScript(parameter, (payload) => {
            if (payload.resultCode.Equals("0"))
            {
                Debug.Log("运行js函数成功: " + payload);
            }
            else
            {
                Debug.Log("运行js函数失败:" + payload.resultCode);
            }
        });
    }

    //网页加载成功
    private void _webView_OnPageFinished(UniWebView webView, int statusCode, string url)
    {
        //AddScript(webView);
        Debug.Log("网页加载成功");
    }

    //退出关闭网页
    private bool _view_OnShouldClose(UniWebView webView)
    {
        webView.Hide();
        webView.OnMessageReceived -= _webView_OnMessageReceived;
        webView.OnShouldClose -= _view_OnShouldClose;
        webView.OnPageErrorReceived -= _view_OnPageErrorReceived; ;
        webView.OnPageFinished -= _webView_OnPageFinished;
        webView.OnMessageReceived -= _webView_OnMessageReceived;
        webView.CleanCache();
        Destroy(webView.gameObject);
        Debug.Log("网页关闭");

        return true;
    }
    UniWebView CreateWebView()
    {
        var webViewGameObject = new GameObject("UniWebView");
        var webView = webViewGameObject.AddComponent();
        return webView;
    }

打包的时候遇到了一个坑,卡在了合成AndroidManifest:

Unity插件学习(四) ------ 内嵌网页UniWebView_第1张图片
解决方法:
Unity插件学习(四) ------ 内嵌网页UniWebView_第2张图片

参考链接:
  1. https://blog.csdn.net/u010019717/article/details/52890644
  2. https://blog.csdn.net/qq_37310110/article/details/79761844?utm_source=blogxgwz1

你可能感兴趣的:(unity)