CocosCreator3.8在不支持wasm平台但依赖微信小游戏构建的处理方式

前言

因为目前CocosCreator有些平台没有直接适配,需要借助构建微信小游戏平台而这些平台本身的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的代码
    原代码
            if (WECHAT) {
                return true;
            }

修改为

            if (WECHAT && typeof WXWebAssembly === 'object') {
                return true;
            }

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

  1. 修改快手的适配文件,如下
if(ks.getSystemInfoSync().platform === 'android'){
    GameGlobal.WXWebAssembly = KSWebAssembly;
}
  1. 如果iOS也需要用wasm的话,需要跟官方进行加白,通过后,可以将安卓的判断条件去掉。但是平台在iOS的适配可能较差,需要多个版本仔细测试,将判断条件完善。

总结

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

原文地址
微信公众号: CocosCreator3.8适配快手小游戏方案
博客: CocosCreator3.8适配快手小游戏方案

8赞

image
请问下,这一块是怎么选择呢?区别在哪?

快手平台吗?
如果选AsmJS就直接以AsmJS跑,没什么问题
如果选Wasm+AsmJS,如果按我的方案改造,就都没问题,但是iOS使用的是AsmJS
如果iOS已经加白了,那么可以直接用wasm的方式跑,可以把安卓的判断去掉

搞定了,感谢大佬 :pray:

您好,请问一下我们快手申请加白了,我们的小游戏用wasm打包,在快手小游戏上iOS成功了,但是android加载骨骼动画就报错了,有什么需要额外配置吗,引擎版本3.8.3

适配代码 GameGlobal.WXWebAssembly = KSWebAssembly; 加了吗?
然后,可以贴下错误代码吗?

没加 ,不是快手通过白名单后不用加适配代码了吗?
我改了引擎代码,android都不使用wasm就好了。。。
android是不能使用wasm吗?

快手的适配器里,只适配了wx的全局变量,没有适配WXWebAssembly

3.8.4 直接用asmjs 就行了吗

搞定了 快手开发助手需要开启兼容微信

如果不考虑性能,当然可以。

如果是更低版本 2.x 呢?

2.x 没上wasm吧

直接打微信包就行了是吗?

是的~~~

1赞