赶上个Web平台的项目,许多方法Unity不能直接使用,需要与JS相互调用进行通信,比如webSocket,直接贴代码。
Unity调用JS:
需要先在工程目录下的Plugins文件夹内创建“__Internal.jslib”文件,内容如下:
mergeInto(LibraryManager.library, {
Hello: function () {
window.alert("Hello, world!");
},
ConnectMQTT: function () {
window.wsconnect();
},
SendMsgByMQTT: function (str) {
window.wsconnect();
},
});
unity工程创建脚本文件,内容如下:
public class UnityToWeb
{
[DllImport("__Internal")]
private static extern void Hello();
[DllImport("__Internal")]
private static extern void ConnectMQTT();
[DllImport("__Internal")]
private static extern void SendMsgByMQTT(string str);
public static void ToJSHello()
{
Hello();//调用定义方法
}
public static void ToJSConnectMQTT()
{
ConnectMQTT();
}
public static void ToJSSendMsgByMQTT(string content)
{
SendMsgByMQTT(content);
}
}
JS调用Unity:
Unity工程内代码如下:
public class WebToUnity : MonoBehaviour
{
private JSToUnityJsonData jsonDataReceive;
public void JsToUnity(string json)
{
Debug.Log(json);
}
}
修改打包后目录中的“index.html”文件
Unity WebGL Player | ProductName
经测试,发现JS调用Unity只支持传入一个参数,Int或者String,所以采用了Json格式的字符串处理多参数的情况。
我们的项目是把unity的Web端嵌入到了three.js中,然后JS调用Unity的时候测试了半天没效果,后来发现是程序焦点的问题,因为是多程序调用,所以需要先把程序焦点固定在unity上才会响应JS的调用方法,后来在打包的时候把允许后台运行的选项勾上了,解决了这个问题。



