如何实现团结引擎小游戏与JS SDK版本互调?

摘要:适应于团结引擎版本发布的全部小游戏,包括但不限于如下: 微信小游戏、bilibili小京戏、京东小游戏、抖音小游戏、支付宝小游戏、快手小游戏等、宿主小游戏。 团结引擎版本:1.6.2 一、Unity调用Js代码: 1、WX-WASM-SDK
适应于团结引擎版本发布的全部小游戏,包括但不限于如下: 微信小游戏、bilibili小京戏、京东小游戏、抖音小游戏、支付宝小游戏、快手小游戏等、宿主小游戏。 团结引擎版本:1.6.2 一、Unity调用Js代码: 1、WX-WASM-SDK-V2目录下的Editor/template/minigame目录下创建一个GameRecommend.js文件。 不同的小游戏可能WX-WASM-SDK-V2这个目录不一样,比如宿主小游戏好像是TJ-WASM, 但是子目录都是template/minigame,如果不存在,就创建。 2、GameRecommend.js里的代码如下: 代码说明:这里是js代码,不是C#代码。 没有funtion的代码会在启动时直接执行。funtion方法可以在Unity中调用。 // 让 window.GameRecommend 变成对象 window.GameRecommend = window.GameRecommend || {}; // 把方法挂上去 window.GameRecommend.doLogin = doLogin; // 同时兼容挂载到 GameGlobal(你原有逻辑) if (typeof GameGlobal !== "undefined") { GameGlobal.doLogin = doLogin; } function sendMsgToUnity(msg) { // 兼容 Unity 实例的不同挂载方式(微信小游戏 Unity 适配的两种常见形式) const unityInst = window.unityInstance || GameGlobal.manager?.gameInstance; if (unityInst) { unityInst.Module.SendMessage("GameGlobal", "OnLoginSuccess", msg); } else { console.error("Unity 实例未加载完成,500ms后重试"); setTimeout(() => sendMsgToUnity(msg), 500); } } async function doLogin() { try { console.error("向Unity发送消息:", "现在开始"); sendMsgToUnity("测试Unity接收") console.error("向Unity发送消息:", "发送结束"); } catch (err) { console.error("失败:", err); } } 3、在game.js中导入这个GameRecommend.js。 4、在C#代码中调用: WX.CallJSFunction("GameRecommend", "doLogin", new object[0]); 这里是C#代码,调用GameRecommend.js中没有参数的doLogin方法,第3个参数需要new object[0]。 不要再使用webgl中传统的Application.ExternalCall()方式来调用。 运行之后,在GamRecommend.js的doLogin方法中可以打印内容。 二、在js中调用Unity中的C#代码。 1、unity层面和传统的方式一样,首先设置一个gameobject,名字取为GameGlobal, 随便给个脚本,里面有一个public的非全局方法,带一个参数,和传统的接收一样。 2、js中的调用: 区别于传统的webGL,传统webgl一般是window.unityInstance可以直接用,但在小游戏里需要再点一个module出来。 再启动测试。