Unity资源管理(二)

之前在前面的Unity资源管理(一)中有讲过一些资源管理,现在系统的再补充一些

一、资源读取方式

1. Resources:支持编辑器模式和发布模式 ,缺点:Resources文件夹下的任何一点点修改,都会导致Resources包的重打。

2. AssetDatabase :仅支持编辑器模式,缺点:正式发布版不能用,要用AssetBundle来替换。

3. AssetBundle: 支持编辑器模式和发布模式,可以根据自己的项目实际情况自定义打包粒度,很好的支持热更新。开发时别用,定义宏,编辑器模式下用AssetDatabase。

同时AssetBundle也支持异步的读取:

AssetBundleRequest abRequest = null;

abRequest = item.assetBundel.LoadAssetAsync("eg");

yield return abRequest;

if (abRequest.isDone)

{

}

方法,使用一个优先级的队列来添加异步加载的指令。

eg:List<ResourceParam>[] m_Loading = new List<ResourceParam>[(int)Priority.Num];

二、AssetBundle,资源加载和卸载

       Unity5可以通过每个资源Inspector底部的AssetBundle下拉来指定该资源要打入哪个包,不指定就是不打包。打包过程只需要BuildPipeline.BuildAssetBundles一句话就行了,Unity5会根据依赖关系自动生成所有的包。每个包还会生成一个manifest文件,这个文件描述了包大小、crc验证、包之间的依赖关系等等,通过这个manifest打包工具在下次打包的时候可以判断哪些包中的资源有改变,只打包资源改变的包,加快了打包速度。(这些都在上篇文章中提到过)

三、贴图资源配置

        Unity根据贴图配置会自动生成最后的贴图数据。

        实际优化:

        1.不会在程序中访问的取消其Read/Write Enable属性,如果打开这个属性,会使运行时贴图大小翻倍,内存中会额外存储一份贴图数据。同样,模型没有顶点动画也可以将这个属性关掉。

         2.贴图不需要A通道的不要讲图片格式设置为RGBA相关格式,设置为RGB节省1/4内存,图片尺寸最大1024*1024。

         3.写工具将未设置图集或者图集设置不正确的图片找出来,给图片设置图集,同一图集内的图片格式最好格式相同,否则会被分成不同的group。

         4.查找重复的贴图删除。

         5.prefab上如果带有Animator并且上面只有一个动画,则用Animation替换。

         6.mipmap关掉,减少多余内存。在测试中我们也发现开启Mipmap并没有带来多少性能提升,在手游的场景中,我们的视距非常近,并没有过多这方面的需求。同时关闭Mipmap我们能节约33%内存,这是一个比较不错的提升。

         7.所有纹理,不透明的使用ETC压缩格式,透明的使用ETC2压缩格式。ETC是所有Android都接受的格式,这个格式的压缩质量较差。但在大部分情况下,很难在手机那么小的屏幕上看到差异。

       在最优配置下使贴图大小缩小了大约64倍。

         (持续更新)

四、模型

       角色:高中低,武器:高中低,特效:高中低。模型面数不同,需要的贴图也不同,高级的可能需要法线贴图和Diffuse贴图,中级和低级的只要Diffuse贴图就可以,用不同的shader实现。

五、音效

        BGM先优化, 压缩,降低比特率/单声道/控制时长。

六、视频

        压缩

七、资源管理器:

  • 统一Resources和AssetBundles加载
  • 类似的加载接口设计,包括同步与异步
  • 强引用计数管理,Load与Unload匹配
  • 支持按优先级加载资源
  • 支持配置系统开销,异步加载开销

八、资源对象池的使用,缓存复用。

移动端DC不超过300,

耗电量:GPU性能>CPU性能>内存占用>载入速度

瞬卡:CPU性能>载入速度>内存占用>GPU性能

平均帧数:GPU性能>=CPU性能>载入速度>占用

参考:https://www.jianshu.com/p/77aa1c492db6

猜你喜欢

转载自blog.csdn.net/jfy307596479/article/details/86093725