现在微信小游戏的项目资源包大小已经由4M改成了8M,为的就是适应小游戏越来越丰富的玩法。
但是,就算有8M也是不足以做大部分游戏的,因为项目中的图片资源就有很多了,绝大部分游戏的资源(除了代码)都在10M以上。
所以对于CocosCreator要打包成小游戏的项目,我们都会统一把资源放在资源服务器上面。
这样,我们可以在小游戏开始运行的时候,只加载游戏的代码文件,而对于资源文件,就可以在加载完代码文件后,慢慢来加载。
这样做有三个好处:
- 避开小游戏项目资源大小不能超过8M的限制
- 避开不可以从远程服务器下载脚本文件的限制
- 可以进行动态加载,避免游戏初次运行时需要加载过多的文件而导致的卡顿
对于以上的第3点,就算不是因为小游戏资源包大小的限制,绝大多数游戏也是需要采取这样的游戏优化策略,所以我们应当把资源放到服务器上。
对于上面的总结,我之前想到一个问题:
就是CocosCreator中对于Prefab的引用有动态加载的和静态加载(编辑界面拖拽)的这两种。
而对于静态加载的已经在脚本中绑定,这样预制体加载(意味着脚本也加载了)的时候可能资源还没有加载,这样脚本会不会不能成功绑定资源?
对于这个问题,我后来发现了Creator官网上说的一句:
对于小游戏包内资源,小游戏环境并不是按需加载的,而是一次性加载所有包内资源,然后再启动页面。
这样,就意味着,脚本加载了的同时,资源肯定也是加载了的,所以问题就可以解决。
下面,引用官网上的一段文字,对远程资源的管理讲解得比较简洁明了:
在小游戏环境中,我们提供了一个 wxDownloader 对象,给它设置了
REMOTE_SERVER_ROOT
属性后,引擎下载资源的逻辑就变成:
- 检查资源是否在小游戏包内
- 不存在则查询本地缓存资源
- 如果没有缓存就从远程服务器下载
- 下载后保存到小游戏应用缓存内供再次访问时使用
同时,当开启引擎的 md5Cache 功能后,文件的 url 会随着文件内容的改变而改变,这样当游戏发布新版本后,旧版本的资源在缓存中就自然失效了,只能从服务器请求新的资源,也就达到了版本控制的效果。
具体来说,开发者需要做的是:
- 构建时,勾选 md5Cache 功能。
- 将小游戏发布包中的 res 文件夹完整的上传到服务器。
- 删除发布包内的 res 文件夹。
- 在构建发布面板中设置
远程服务地址
。- 对于测试阶段来说,可能你无法部署到正式服务器上,需要用本地服务器来测试,那么请在微信开发者工具中打开详情页面,勾选项目设置中的
不检验安全域名、TLS 版本以及 HTTPS 证书
选项。