cocos 微信小游戏 资源超20M 解决方案
最近一直在搞微信小游戏,随着增加的模型和图片资源越来越多,在真机预览的时候一直会出现资源包过大的提示,无法进行打包真机预览,经过一番尝试,找到了解决方法,在这里记录一下,希望能够帮助到遇到同样问题的人。
1.问题现象
我的cocos 是 3.7.0 版本的,这篇文章是 2023/4/3 日,现象是,包体过大,超过了 20M 的限制,无法进行真机预览。
2.解决方案
2.1 新建一个文件夹,用来存放比较大的资源
名称随意,我这里新建的文件夹叫 netResources,里面放的是正式的战斗场景,然后在右边的属性栏中勾选 is Remote 选项,这样编译的时候就会将这个文件夹以及相关的资源打包到 remote 文件夹中。
2.2 配置编译选项
对应图中的序号,需要说明 4 个需要注意的地方:
1.选择微信小游戏类型;2. 会自动识别到作为 bundle 的场景资源;3. 这里一定要选择小游戏分包类型,因为默认的类型会超过 4M 的限制,选小游戏分包的话是 20M 的上限。4. 这里测试阶段可以不用勾选,不然每次重新编译都需要重新上传 remote 包。5. 这里填入自己的服务器地址,这个需要是备案过的域名,并且是 https 协议的。
2.3 新建场景,作为第一个启动场景
新建一个场景,这个场景尽可能简单,保证低于 20M,通过网络加载服务器中的大资源场景。
2.4 在场景的画布上挂载一个脚本,用来从服务器加载其他资源和场景。
脚本内容如下:
import { _decorator, assetManager, Component, director, AssetManager } from 'cc';
const { ccclass, property } = _decorator;
let date = new Date();
@ccclass('LoadScene')
export class LoadScene extends Component {
start() {
// 这里 netResources 是要加载的assetBundle的名字
// fight 是要加载的场景的名字
assetManager.loadBundle('netResources', (err, bundle) => {
bundle.preloadScene('fight',this.onProgress, this.onLoaded);
});
}
onProgress(finished: number, total: number, item: AssetManager.RequestItem) {
console.log(finished + " / " + total);
}
onLoaded(err?: Error | null) {
director.loadScene('fight');
}
protected onDestroy(): void {
console.log("destroy fight.")
}
}
2.5 将remote文件上传到服务器,删除本地的remote文件。
如图,是编译后生成的文件,将其中 remote 文件夹上传到服务器中,同时删除本地的 remote 文件,我这里用的是阿里云的 oss,直接拖拽上去就行了。
2.6 这样在微信小游戏开发工具中就不会报错了。
remote 文件夹 14M,删除后最终代码包 6M 多,运行成功。
2.7 致谢
欢迎大家关注我的公众号,老刘开发日记。