关于这个工作,不熟悉js的我踩了不少坑,记录一下,希望能帮到一些同仁
主要是参考这个文档
参考文档
然后有几个自己踩得坑记录一下

Unity调用微信的JS

1.unity CS端:

 	private void OnClickBtn1()
    {
        WeChatWASM.WX.CallJSFunction("WXRecommend", "loadRecommend");
    }

用WASM的API,参数1是自定义的js文件名,参数2是方法名

2.自定义js文件


const WXRecommend = {
    recommendPageManager:null,
    loadRecommend: async function () {
        if (!wx.createPageManager) {
            throw '当前基础库版本暂不支持。';
        }
        this.recommendPageManager = wx.createPageManager();
        await this.recommendPageManager.load({
            openlink: 'TWFRCqV5WeM2AkMXhKwJ03MhfPOieJfAsvXKUbWvQFQtLyyA5etMPabBehga950uzfZcH3Vi3QeEh41xRGEVFw', // 推荐组件OPENLINK常量,直接复制即可,无需理解含义
        });
        Module.SendMessage('ApplicationShell', 'OnVXRecommendWndReady');
        this.recommendPageManager.on(
            'destroy',
            (res) => {
                Module.SendMessage('ApplicationShell', 'OnVXRecommendWndDestroy', res.isRecommended?'true':'false');
                    console.log('recommend component destroy:', res.isRecommended);
            },
        )
    },

    /**
     *  拉起推荐组件
     */
    showRecommend: async function () {
        if (!this.recommendPageManager) {
            await this.loadRecommend();
        }
        return await this.recommendPageManager.show();
    },
   
     
}

GameGlobal["WXRecommend"] = WXRecommend;
console.error('WTF.......:', "dsdkjsdkshiwon,cnxcdhjchdisuh");

因为鄙人不善于写js代码,这地方折腾了好久。
注意要把函数都包装到一个js对象里,我这里是:WXRecommend 用大括号包裹起来,然后再最后在用GameGlobal[“WXRecommend”] = WXRecommend; 这样就相当于全局都能引用这个WXRecommend了,这样C#调用的js名字就能找到他了。

3.把js类放入对应位置

我们转换微信小游戏工程最终是要放在这个位置的
在这里插入图片描述
而我不可能每次都在这里加,肯定是在unity里加。
参照文档,写好js之后 放在这个目录下
在这里插入图片描述
这样转完了就会生成在对应位置,我这个版本的转换工具原来是没有这个目录的,需要自己创建。

4.要在game.js里加载到自己写的js

自己写的js需要在微信小游戏的主函数game.js里加载到才能使用,否则无效,所以需要在game.js里加上这么一句

require('./WXRecommend.js');

加在头部就行了,同样的,为了避免每次生成game.js之后手动修改,我们需要在unity里修改模版js
这里找到他的模版js在这里(藏得挺深)
在这里插入图片描述
把他复制出来一份,然后加上Requre()那句,然后在粘贴在之前同样的位置,大功告成

微信端调用Unity函数

这个花费了我好多时间,之前一直没注意到文档下边有写

  // 其中,objectName 是场景中的对象名称;methodName 是当前附加到该对象的脚本中的方法名称;value 可以是字符串、数字,也可为空。
  GameGlobal.Module.SendMessage(objectName, methodName, value)

轻信了AI的谗言,找了半天
GameGlobal.manager.gameInstance.SendMessage(XXX)
GameGlobal.unityNamespace.SendMessage(XXX)
都死活调用不出

结果发现胶水层
在这里插入图片描述
直接调用这个就行
Module.SendMessage(“gameobject名字”,"函数名字”,"参数可选”);
注意在unity端要确认好对应的物体和函数名即可。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐