Unity集成内嵌网页插件-支持Android和IOS

来源:互联网 发布:mac apowersoft 编辑:程序博客网 时间:2024/05/22 00:08

本文所用到的插件,是修改自一个日本人keijiro的代码。他的源码地址为:https://github.com/keijiro/unity-webview-integration

为更易于使用,本插件是将其源码由javascript改为C#代码,并做了一些修改和优化,并打包成unitypackage包,可直接导入项目中使用,方便快捷!

本插件支持Unity与网页javascript进行双向交互

插件下载地址http://download.csdn.net/detail/home_498/9577122

下面是该插件的使用方法:

1.导入插件包

右键你的工程,选择Import Package-Custom Package...,选择unity-webview.unitypackage


此时会显示你要导入的文件,如果不需要看我写的测试用例,则可以不勾选下面的WebViewExample,然后点击Import可导入

2.场景中引入

2D场景用的时候,只需在Canvas新建一个Empty(Create Empty),并绑定WebMediator.cs,调整这个Empty的位置和大小,就可以改变网页的显示位置和大小。

3D场景使用的时候,不需要调整位置和大小,在代码中调用SetMargin进行定位

3.代码调用

声明一个类变量,并将上面创建的empty对象绑定至该变量

public WebMediator WebView;

在使用的地方直接调用即可,千万别忘记加前面的http://

WebView.Show("http://blog.csdn.net/home_498/article/details/51918041");

3D场景使用的时候,再调用下面这句进行定位即可,传入的参数是网页到屏幕边框的距离

WebView.SetMargin(10, 10, 10, 10);
4.Unity调用javascript方法

如下可直接从Unity调用javascript方法,第一个参数为javascript方法名,第二个参数为传入javascript方法的参数,为字符串类型

WebMediator.CallJavascript("javascriptMethod", "这里可以传入一个字符串参数");

5.javascript发消息到Unity

网页要发送消息到Unity,网页需要引入unity.js(在文章开头的下载地址打包下载),调用unity.callback即可发送消息到Unity,第一个参数为消息名,第二个参数为消息内容(传入一个json,到C#端直接以Hashtable形式取出)

网页代码

<html><head><meta http-equiv=Content-Type content="text/html;charset=utf-8"><script type="text/javascript" src="unity.js"></script><script type="text/javascript">function pushMsg(method){    var val = document.getElementById("testInput").value;    unity.callback(method, {'msg':val});}function javascriptMethod(args){    alert(args);}</script></head><body><input id="testInput" /><input type="button" value="提交A" onclick="pushMsg('A')" /><input type="button" value="提交B" onclick="pushMsg('B')"/></body></html>

Unity中取消息需要主动调用PollMessage方法,可写在Update中每帧刷新执行,即可实现实时处理,效果上等同于javascript直接调用了Unity。

C#代码

    private void ProcessMessages() {        while (true) {            // Poll a message or break.            var message = WebMediator.PollMessage();            if (message == null) break;            Debug.Log(message.path);            switch (message.path)            {                case "A":                    A.text = message.args ["msg"].ToString();                    break;                case "B":                    B.text = message.args ["msg"].ToString();                    break;                default:                    break;            }        }    }    void Update() {        if (WebMediator.IsVisible()) {            ProcessMessages();        }    }


2 0