最近一直在搞微信小游戏,随着增加的模型和图片资源越来越多,在真机预览的时候一直会出现资源包过大的提示,无法进行打包真机预览,经过一番尝试,找到了解决方法,在这里记录一下,希望能够帮助到遇到同样问题的人。

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 致谢

欢迎大家关注我的公众号,老刘开发日记。

在这里插入图片描述

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐