敖可 发表于 昨天 22:15

团结引擎发布小游戏与js版本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);这里是C#代码,调用GameRecommend.js中没有参数的doLogin方法,第3个参数需要new object。
不要再使用webgl中传统的Application.ExternalCall()方式来调用。
 运行之后,在GamRecommend.js的doLogin方法中可以打印内容。
 
二、在js中调用Unity中的C#代码。
1、unity层面和传统的方式一样,首先设置一个gameobject,名字取为GameGlobal,
随便给个脚本,里面有一个public的非全局方法,带一个参数,和传统的接收一样。

 2、js中的调用:

 区别于传统的webGL,传统webgl一般是window.unityInstance可以直接用,但在小游戏里需要再点一个module出来。
再启动测试。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 团结引擎发布小游戏与js版本SDK的互相调用