开了一个系列来记录下在开发过程中遇到的问题。
这里面有些是 Unity 自身的问题,只要使用 Unity 来开发项目都会遇到,有些是使用 Utage 时才会遇到。
目前 Utage 有多种资源加载方式,完整版加载方式可参考 Utage 文档里的 AdvEngineStarter StrageType
- Local 使用 Resources 加载
- StreamingAssets 使用 StreamingAssets 加载
这里主要说的是这 2 种资源加载方式和打包(Build)时遇到的问题。
初期开发时最方便的加载方式 Resources
Utage 的 Sample 示例就是使用的 Resouces 方式加载,整个开发过程都很简单:
- 放需要用到的资源到 Resources 里指定的文件夹。
- 写好项目配置文件。
之后,就可以在演出脚本里使用定义好的 Label 来显示图片等资源了。
方便归方便,随着项目使用的资源文件数量变多,项目变的复杂之后,会遇到下面几个问题。
这些问题都会导致自己开发了游戏,但是发布的时候却遇到了问题,一般会再开发后期需要进行测试的时候发现,于是开始寻找解决方案。
经过搜索之后发现在 Unity Tutorial 的 Assets, Resources and AssetBundles 中,Chapter3 的 Resources 里有写到
3.1. Best Practices for the Resources System
Don't use it.
好的,Unity Official 在最佳实践教程里面说 不要使用 Resources。
我们经过专业训练,就算再好笑,我们都不会笑。(哈哈哈哈哈哈)
Unity 在挖了一个坑之后,必然会给你指引去使用另一个新的坑,Resources 使用起来有问题,那不如去试试 StreamingAssets?
后期开发,发布时使用 StreamingAssets
Utage 在官方教程里有一篇文章介绍如何使用 StreamingAssets 来减小 app 大小的。传送门:StreamigAssets を使ってアプリサイズ削減
使用 StreamingAssets 的优点就是解决了上面的使用 Resources 时出现的问题。
- 解决了在使用 Resources build 时 .resS 文件大小超过 4GB 时无法 build 问题。
在 Build 的时候 Unity 会把 StreamingAssets 文件夹里的所有文件拷贝到最终包里面,所以不会出现使用 Resources 的时候,明明 Resources 只有 1.x GB 大小的素材,打包出来之后 .resS 文件体积变的超大。
能做到每次打包时间在 1分钟内,具体时间视电脑配置而定,CPU 和 SSD 性能最影响打包时间。
StreamingAssets 里的素材,不会像使用 Resources 的时候每次 build 都会将 Resources 里的素材进行 compress 等耗时操作。
加载图片时出现花屏这个问题,使用 StreamingAssets 方式没出现。
也许是 Unity 在 Build 时压缩 Texture 生成 .resS 文件的时候 出现错误导致的,也有可能是其它问题,具体原因时什么,我也不清楚。
开始吐槽的分割线
使用 Resources 时出现的问题解决了,那用 StreamingAssets 岂不是很完美?世上哪有这么好的事情,下面来说说使用 StreamingAssets 时出现的问题。
第一次 Build 的时候,会给每个资源添加 AssetBundleName,对资源进行 Compress 等操作整个过程非常耗时。
后面 Build 可以选择只将未命名的资源 Rename AssetBundleName,会快点。
每次导入资源之后,都需要 Build AssetBundle 之后,才能启动游戏来验证资源是否更新了。
那么,我应该使用什么方式来管理加载资源?
当然是自己权衡利弊,自己选择适合该项目的方式啦。
Resources 很方便,但出现无法解决的 build 问题之后,可以试试 StreamingAssets。
StreamingAssets 使用时出现了问题,如果是时间和开发机器配置性能的问题,那都不是问题。顶配 + NVMe SSD 会给你带来更好的开发体验的。
如果是 AssetBundle 的视频不能播放,那 Untiy 官方都没啥 workaround,可以试试第三方插件?
也许 Unity 新推荐的使用 Addressable Assets System 也可以试试?不过这个 Utage 虽然有给 Sample package,但后面一句又一句的请自力扩张,让我不敢用到项目上。(你太菜了。)