之前我们接入微信小游戏的本身代码js桥接比较完善,而抖音小游戏在这方面有些缺失,但并没有这么严重。而华为小游戏的API给出的文档和转换插件的Github仓库也不是很完善。上一次对API进行提交是在3月份(截至现在)。API给的内容非常简略,接入js代码那里只说 "看demo",但unity的demo里面没有jslib。另一个比较完善的demo看起来像是cocos的,让人感到有些无奈。
还好,使用unity导出的webgl产物和导出rpk是分开的,因此我们可以直接测试调整jslib来快速尝试,而不用浪费大量的时间用来打包。
华为官方的JS API文档中给出的API全局对象是
qg
。在转换插件内部的代码
QGSDK-Call-JS.jslib
中可以找到大量以
QG_
开头的函数,但没有
qg
字段。然而API看起来都是使用
ral
作为入口。再看打包插件里面的
ral.js
是调用
qg
的。
我们进行了测试发现
ral === window.ral
,
qg === window.qg
,直接通过
Object.keys(x).forEach()
来遍历打印
qg
和
ral
两个对象,键值对的文本是能匹配上的。直接调用又有些内容不同,比如有
qg.showToast
但没有
ral.showToast
,都使用
qg
测试
qg.showToast
是能用的,不知道会不会有其他问题。
下面我们展示了一些桥接代码的思路,一些接口基于实际需求进行了简化。
下面是处理js返回C#的回调的相关代码片段:
// 省略了一些基础的代码,如引用和命名空间的定义
public delegate void SDKCallback(int code, string msg, string dataStr);
public static class SDKCode
{
public const int Succeed = 1;
public const int Failed = -1;
public const int Cancel = -2;
}
public class CsJsEventHandler : MonoBehaviour
{
// 省略其他代码
}
下面是jslib的相关代码片段:
/*
* handler return code:
* SUCCEED: 1
* FAILED: -1
* CANCEL: -2
*
* 只展示部分函数,请根据实际需求自行添加
*/
var js_bridge_sdk_api = {
// 省略了一些函数的定义
};
autoAddDeps(js_bridge_sdk_api, "$JSBHelper");
mergeInfo(LibraryManager.library, js_bridge_sdk_api);
下面是C#调用的相关代码片段:
// 省略了一些函数的定义
标签:游戏攻略