记录贴 Unity和JS相互调用

赶上个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”文件

<!DOCTYPE html>
<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Unity WebGL Player | ProductName</title>
    <script src="Build/UnityLoader.js"></script>
    <script>
      var gameInstance = UnityLoader.instantiate("gameContainer", "Build/ProductName.json");
	  function JsToUnityString(content)
	  {
	  gameInstance.SendMessage("JSToUnity","JsToUnity",content);//场景内有一个GameObject名称叫"JSToUnity",
	  //上边挂载的脚步中有一个"JsToUnity"方法,脚本名称没有要求,但是猜测如果挂载了多个脚本中都有叫做"JsToUnity"的方法,可能会出问题。
	  }
    </script>
  </head>
  <body>
    <div id="gameContainer" style="width: 1920px; height: 1080px; margin: auto"></div>
  </body>
</html>

经测试,发现JS调用Unity只支持传入一个参数,Int或者String,所以采用了Json格式的字符串处理多参数的情况。

我们的项目是把unity的Web端嵌入到了three.js中,然后JS调用Unity的时候测试了半天没效果,后来发现是程序焦点的问题,因为是多程序调用,所以需要先把程序焦点固定在unity上才会响应JS的调用方法,后来在打包的时候把允许后台运行的选项勾上了,解决了这个问题。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JS(JavaScript)和Unity可以通过以下几种方式进行互相调用: 1. 使用Unity的JavaScript API:Unity提供了一套JavaScript API,可以在JS中直接调用Unity的功能。通过Unity的文档和官方教程,我们可以了解到Unity所提供的JavaScript API,然后在JS中使用这些API来调用Unity的功能。 2. 使用UnityWeb Player:Unity有一个Web Player插件,它可以在网页中嵌入Unity应用程序。我们可以在JS中通过JavaScript接口来与嵌入的Unity应用程序进行交互。通过这种方式,我们可以将JS中的数据传递给Unity应用程序,并实现双向通信。 3. 使用Unity的C# API和JS插件:除了使用Unity的JavaScript API,我们还可以使用Unity的C# API来进行互操作。我们可以创建一个C#脚本,实现我们需要的功能,然后在JS中通过调用该脚本来使用Unity的功能。 4. 使用WebSocket通信:WebSocket是一种用于在Web浏览器和Unity应用程序之间进行实时通信的网络协议。我们可以在JS中使用WebSocket API与Unity应用程序建立连接,并通过该连接发送和接收数据。这种方式可以实现实时的数据传输和双向通信。 总结来说,JSUnity可以通过JavaScript API、Web Player、C# API和JS插件以及WebSocket通信等方式进行互相调用。具体使用哪种方式,取决于我们的需求和技术背景。需要注意的是,在使用这些方式进行互操作时,我们需要充分了解和掌握各种API和技术的使用方法和注意事项,以确保正确地进行调用和交互。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值