官方手册——WebGL:与浏览器脚本交互:https://docs.unity3d.com/cn/current/Manual/webgl-interactingwithbrowserscripting.html
Unity发送消息到Web前端
1.创建.jslib文件
需要放到Unity的Plugins文件夹下。名字随意。
例如: Test.jslib
mergeInto(LibraryManager.library, {
Hello: function () {
TestSend("Hello, world!");
},
});
Hello名字在unity中使用,TestSend名字在Web中使用。
注意1:mac系统中编码问题,创建文件,改后缀之后,需用vs打开确认内容是否正确
注意2:定义jslib的function内方法时不可以使用SendMessage名字,不然会在web端调用异常。
2.创建关联脚本
//声明和jslib文件关联的Hello()方法
[DllImport("__Internal")]
private static extern void Hello();
void Start()
{
//调用测试,在unity脚本任意地方,调用hello方法都可以。
Hello();
}
3.打包,并修改index.html测试
在html代码的中添加如下代码:
function TestSend(s)
{
alert(s);
}
<script>
var gameInstance = UnityLoader.instantiate("gameContainer", "Build/XXXXX.json", {onProgress: UnityProgress});
function TestSend(s)
{
alert(s);
}
</script>
方法名TestSend与.jslib文件function内方法名相同,参数数量相同。
打开更改后的网页,即可发现进入场景后,执行了Start()中的Hellow方法,从而调用了web中新定义的TestSend()方法。弹出alert对话框。
5.如需传递字符串,jslib代码:
mergeInto(LibraryManager.library, {
Hello: function (str) {
TestSend(Pointer_stringify(str));
},
});
传递其他数据结构,请查看上方官方手册。
Web前端调用Unity方法
1.在Unity脚本中创建public方法
public void GetFromWeb(string str)
{
Debug.Log(str);
}
并将脚本挂在到场景中。
2.修改打包后的index.html文件
使用gameInstance.SendMessage(“GameObject”,“GetFromWeb”,s);调用unity内方法。
SendMessage中第一个参数为挂在1中脚本的物体名称,第二个参数为方法名称,第三个参数是对应的方法参数。
为方便测试,将调用脚本写在unity向web发送消息时用的脚本里。
function TestSend(s)
{
alert(s);
gameInstance.SendMessage("GameObject","GetFromWeb",s);
}
写在普通的js方法里,通过html调用也是一样的,不过这就交给前段同学吧。
3.测试
一开始和第一部分一样,打开webgl网页,执行了unity的Start()中的Hello方法,从而调用了web中定义的TestSend()方法:1.alert(s);
弹出写着参数s的alert对话框。然后执行 2. gameInstance.SendMessage("GameObject","GetFromWeb",s);
调用unity场景中名为GameObject物体上脚本里的GetFromWeb()方法,并将参数s传入。 按F12打开控制台,即可看见输出的参数s。
脚本代码(可直接使用),包含测试Demo:https://download.csdn.net/download/boyZhenGui/15577370
谢谢阅读,如果对你有帮助可以给我点个赞,或者加个收藏,方便以后查看