CocosCreator3.8适配快手小游戏方案

前言

因为目前Cocos未直接适配快手,而快手本身的wasm支持不完善,所以需要进行一定的适配

分引擎方案

3.8.1方案

该版本,快手官方进行了适配,可以看官方的文档cocos creator 3.8.x spine.wasm报错处理方案,简单而言,就是用asmJS替代wasm。

3.8.2方案

因为引擎对微信的判断为强制wasm,所以只能修改引擎版本

  1. 升级到3.8.3以上
  2. 降级到3.8.1,且使用3.8.1方案

3.8.3及以上

该版本,引擎官方直接提供了选择,可以使用wasm、asmJS或都选,但是适配快手还是有问题,因为Cocos默认微信一定支持wasm,所以需要修改引擎代码

  1. 修改resources/3d/engine/pal/system-info/minigame/system-info.ts的代码
    原代码
    1
    2
    3
    4
    if (WECHAT) {
    return true;
    }

    修改为
    1
    2
    3
    if (WECHAT && typeof WXWebAssembly === 'object') {
    return true;
    }

如果确认快手不需要wasm,那么这样该就行了,如果想在快手上也使用wasm,那么需要继续下面的操作。

  1. 跟官方申请,加白wasm。

  2. 修改快手的适配文件,如下

1
2
3
if(ks.getSystemInfoSync().platform === 'android'){
GameGlobal.WXWebAssembly = KSWebAssembly;
}

因为快手iOS的支持还有点差,所以这里只有安卓才开启wasm。当然,可以先把判断去掉,在iOS上测试下,如果iOS已经完善了wasm支持,也可以不要这个判断。

总结

在3.8.3版本后,官方对wasm的回退已经做了比较好的处理,只是因为pal下的判断有些不妥善(与官方沟通是,这块由对应平台官方维护,他们一般不会改,所以也能解释的通,为什么微信直接返回true了)。
当然,这个方案,不仅仅适配快手平台,对其它不支持wasm而需要通过构建微信小游戏支持的平台也一样试用。