探讨华为小游戏API接入及相关桥接代码

之前我们接入微信小游戏的本身代码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#调用的相关代码片段:

// 省略了一些函数的定义

标签:游戏攻略