看了官方文档, 然后测试了一下unity和webGL之间的交互方法。
web端调用unity的方法:
首先在unity项目里写一个方法,例如给分别给两个个cube改颜色:
这里我是创建了两个方法,一个使用C#创建
public void webMessageCSharp(){
obj.GetComponent ().material.color = Color.blue;
}
另一个使用JS创建
var target:GameObject;
function webMessageJS(){
target.GetComponent.().material.color=Color.red;
}
然后导出项目,build为WebGL模式,这里好像应该导出为开发者模式,也就是选中Development Build,这样方便调用sendMessage方法
当然如果不导成开发者模式,我们也可以调用sendMessage方法,那就是在HTML里面添加
导出项目后,打开index.html文件
设置按钮,添加响应事件
function r(){
SendMessage("Main Camera","webMessageJS","");
SendMessage("Main Camera","webMessageCSharp","");
}
关于sendMessage方法,是unity通用于iOS,Android,web的交互方法,参数一是脚本所挂物体的名称,参数二是脚本里面的方法名,参数三是传参。
unity调用web端的方法:
有两种方法,
第一种使用
Application.ExternalCall ();
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
void Example()
{
// Calls MyFunction1 in the web page with no arguments
Application.ExternalCall("MyFunction1");
// Calls MyFunction2 in the web page with a string
Application.ExternalCall("MyFunction2", "Hello from Unity!");
// Calls MyFunction3 in the web page with several arguments of different types
Application.ExternalCall("MyFunction3", "one", 2, 3.0F);
}
}
然后在导出的html文档中写响应的方法就可以
function MyFunction3( arg )
{
alert( arg );
}
这个方法
会不等网页执行结果而继续往下执行。
还有一个函数类似
Application.ExternalEval()
;可以参考官方文档使用
第二种方法就是使用类似于与iOS交互的方式
在unity中创建代码,
[DllImport("__Internal")]
private static extern void Hello();
用按钮调用方法
public void btn(){
Hello ();
}
然后创建一个后缀为.jslib类型的文件
文件内写
var MyPlugin = {
Hello: function()
{
window.alert("Hello, world!");
}
};
mergeInto(LibraryManager.library, MyPlugin);
导出后,按unity创建的按钮,会在网页弹出Hello, world!