欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Unity 理解游戏优化

程序员文章站 2022-03-27 16:02:51
Unity通透理解游戏优化Unity优化的知识点很多,从美术资源、代码逻辑、框架设计等等。像我一样的浅知识友人可能知道其中部分解决方式方法,但是不明白其中的原由的话,很难理解为什么。所以我们需要从Unity整体的性能分析出发,理解Unity的优化路线,查阅之后得出以下总结,纰漏出大佬留言补充。我们知道应用程序的优化大体可以从三个方面出发,内存连续、减少指令、多线程并行一、 内存连续1、代码......

Unity 理解游戏优化

Unity优化的知识点很多,从美术资源、代码逻辑、框架设计等等。像我一样的浅知识友人可能知道其中部分解决方式方法,但是不明白其中的原由,很难理解为什么。如果我们需要从游戏的性能分析出发,理解Unity的优化路线,查阅之后得出以下总结,纰漏处大佬留言补充。

我们知道应用程序的优化大体可以从三个方面出发,内存连续、减少指令、多线程并行
一、 内存连续
1、代码优化
.net使用托管堆管理应用程序的主内存使用,对于托管堆上的内存回收使用GC进行处理,那么GC的问题就是我们要解决的问题,减少GC发生、适当手动GC就是我们在代码优化方面的重点。
Unity 的生命周期适当利用,游戏全局管理好线程任务,处理各个模块驱动条理清晰,可以抽象设定自定义的全局生命周期管理
2、资源优化
(1) 贴图优化
a、纯色背景图、对称纹理贴图等九宫格裁剪——减小贴图;
b、非透明图片在Alpha Source中取消通道使用——减小贴图;
c、MaxSize大小限制,但需要保证图片清晰度——减小贴图;
d、压缩,Android使用ETC,IOS使用PVRTC——减小贴图;
e、不需要动态读写的图片,Read/Write 关闭 ——减少内存占有
f、3D模型贴图涉及到摄像机远近移动的,我们需要使用MipMap进行优化,减少渲染带宽,相反非3D模型贴图且不涉及摄像机远近问题的图片,取消MipMap,减少CPU消耗;
g、打图集——减少DrawCall;
h、Batch批处理(Static Batching、Dynamic Batching)——减少DrawCall;

(2) 模型优化
a、3DMax中顶点消减,不重要面删除——减小模型顶点
b、3DMax中无用ParticleView删除——减小模型
c、Unity中Mesh

(3) 音频优化
借用此博主的详细总结 https://www.cnblogs.com/bearhb/p/11210136.html

Load Type的各个选项
Compressed In Memory – 音频剪辑将存储在RAM中,播放时将解压缩,播放时不需要额外的存储。
Streaming –音频永久存在设备上(硬盘或闪存上) ,播放流媒体方式. 不需要RAM进行存储或播放。
Decompress On Load – 未压缩的音频将存储在RAM中。这个选项需要的内存最多,但是播放它不会像其他选项那样需要太多的CPU电源。
怎么选?长音频播放消耗大量内存,如果播放时不想在内存中进行解压,有两个选择:
(1)Load Type选“Streaming”, Compression Format 选”Vorbis",使用最少的内存,但需要更多的CPU电量和硬盘I/O操作;
(2)Load Type选“Compressed In Memory”, Compression Format 选”Vorbis",磁盘I/O操作被替换成内存的消耗,请注意,要调整“Quaility”滑块以减小压缩剪辑的大小,以交换音质,一般推荐70%左右。
一般是看到底音乐占据多少内存以及你的目标机型是什么样子的,如果音乐占据的内存本身比较高,你的目标机型的内存又比较小,那么就选择第二种,这种方案会卡一点,否则选择第一种就更好

声音特效
(1)对于经常播放的和短的音频剪辑,使用“Decompress On Load”和“PCM或ADPCM"压缩格式。当选择PCM时,不需要解压缩,如果音频剪辑很短,它将很快加载。你也可以使用ADPCM。它需要解压,但解压比Vorbis快得多。
(2)对于经常播放,中等大小的音频剪辑使用”Compressed In Memory“和”ADPCM“压缩格式,比原始PCM小3.5倍,解压算法的CPU消耗量不会像vorbis消耗那么多CPU。
(3)对于很少播放并且长度比较短的声音剪辑,使用”Compressed In Memory", ADPCM 这种压缩格式,原因同(2)。
(4)对于很少播放中等大小的音频,使用”Compressed In Memory“ 和Vorbis压缩格式。这个音频可能太长,无法使用adpcm存储,播放太少,因此解压缩所需的额外CPU电量不会太多。

(4) 加载优化
对于大文件使用异步加载,资源管理做好生命管控,及时卸载不需要的(无引用)资源。常用素材内存常驻,减少I/O加载。资源模块做好分离,在不同模块直接切换时及时卸载非当前模块的资源,公共资源做好常驻。

二、减少指令

CPU向GPU发送渲染指令也是造成卡顿的主要原因,DrawCall是为减少指令发送的频率,该链接详细讲述了图形渲染 https://blog.csdn.net/qq_21397217/article/details/80401708

三、多线程并行

多线程并行的构想在Unity提出的ECS框架原理,自2018之后Unity可能会实现将部分纯逻辑放入Job线程中实现。

本文地址:https://blog.csdn.net/sinat_26574531/article/details/105845161

相关标签: Unity 内存优化