先说下,本人萌新。昨天在搞远程资源包加载的时候有些心得,现在分享出来,有错误烦请指正。
先上游戏

我是上传后才将游戏版本提交的,如果在我发帖后您立刻看到了文章,可能会看不到效果。
首先感谢@lymaple的文章https://forum.cocos.org/t/topic/142053。基本是根据他的文章实现了功能。当然也参考了其他大神的一些文章。
虽然大体上实现了功能,但我个人知道肯定还有不少问题,欢迎各位大佬指正。
CocosCreator版本:3.7.2
为什么要搞远程资源包加载?
我个人的游戏开发基础很薄弱,基本上是看了几个B站的视频就上手了,所以很多基础知识都不懂。我做的小游戏因为用到的bgm音频文件体积很大,导致打出包来接近20M。虽然用小游戏分包的方式也能够上传运行,但是在加载的时候,会出现长时间的黑屏。于是想到了资源远程加载。
长时间黑屏的原因是什么?
我个人考虑黑屏的原因,项目开启了首屏初始化场景分包,经过观察和测试,发现在载入小游戏的界面,只下载了初始化场景包,之后,进入插屏界面,插屏界面结束后,开始下载其他分包,就是这个下载分包的过程,导致了黑屏。
远程加载资源包是唯一的解决方式么?
我的感觉是未必。我在研究的过程中,我尝试过用wxAPI加载分包的方式,一直没有成功。直到后来我研究远程分包,发现在构建的目录下的src\settings.json中,有这么一段:
这段配置是由引擎自动生成的,而我在修改远程加载前,这一段里其实是有resources数据的。也就是说,因为这里没有修改,导致游戏下载首屏插屏结束后,又下载resources导致黑屏。所以我猜测了另一种解决方式,那就是在preloadBundles中删除掉resources的数据,再使用wx.loadSubpackage的方式能否解决这个问题,但是我并没有尝试。。。就着急来写这个帖子了。。。
接下来开始搞远程包。
第1步
搞一个腾讯云的对象存储服务,单纯的买是不咋花钱的,我是1元/年。但我不知道后续费用如何。宽带我个人能接受。当然如果有自己的服务器更好了。。。
第2步
搞一个初始化界面,带进度条或者百分比都可以,我是用的百分比。。。
第3步
给初始界面挂上脚本
start() {
assetManager.loadBundle('https://xxxxxxx.cos.ap-beijing.myqcloud.com/xxxxxx/remote/resources',
{
//据说不设置的话,每次都要重新下载资源文件,我个人没有测试
cacheEnabled: true,
//下载进度回调
onFileProgress:(loaded) => {
this.percent.string = '' + loaded.progress + '%'
if(this.fileCount == 0){
this.percent.string = '' + (loaded.totalBytesWritten / loaded.totalBytesExpectedToWrite / 3 * 100).toFixed(2) + '%'
}else{
this.percent.string = '' + (1 / 3 * 100 + loaded.totalBytesWritten / loaded.totalBytesExpectedToWrite * 2 / 3 * 100).toFixed(2) + '%'
}
if(loaded.progress == 100){
this.fileCount = 1
}
}
},
function (err, bundle) { //远程下载结束回调,加载开始场景
director.loadScene('start')
});
}
assetManager.loadBundle的第一个参数就是你的腾讯存储对象的url了。
这里说下我的代码里为啥有个this.fileCount,最终生成放在远程的文件有两个,这两个文件都会进入进度回调。但我log了一下,发现没有办法区分这两个文件,所以就增加了这个参数,第一个文件占1/3的进入,第二个大不少,占2/3的参数,所以这边也求问怎么才能获取到总进度。这里我搜索过论坛,似乎都是2.x的帖子,没找到最合理的方式。
第4步
构建项目,设置如下:

这里我把主包压缩设置为了无压缩,同时也没有配置主包为远程包,因为项目太小,主包打出来就十几K,要是配置为远程还要有一个下载主包的过程,嫌麻烦,就关了。
第5步
构建项目,之后进入构建的目录xxxx\build\wechatgame\remote。
在腾讯对象存储上传整个remote目录,注意可以上传整个目录,不用一个文件一个文件传

上传成功后确认下,对象的url是不是跟第3步assetManager.loadBundle的参数里的一致。
第6步
删除整个remote目录,要是上传到小游戏就又长时间黑屏了。
第7步
登录小游戏后台=>开发管理=>开发设置,增加你的远程对象url至小游戏的合法域名。
使用小游戏开发工具发布,测试。


