Unity中的性能优化
++Profiler分析器
++++通过分析器分析哪部分内容急需优化:
#1、CPU优化
++1.1、CPU优化分类
++++CPU优化:
--DrawCalls
--物理组件
--GC(Carbage Collection垃圾回收)
--代码质量
++1.2、DrawCalls
++++Unity每次在准备数据并通知GPU渲染的过程称为一次DrawCall。
++1.3、Draw Call Batching(批处理)
++++多次DrawCall =>一次DrawCall
++1.4、Static Batching静态批处理
++++批处理相同材质静态对象或相同纹理的静态对象。
++1.5、Dynamic Batching动态批处理
++++批处理非静态对象,但要求苛刻,稍作修改就会批处理不成功,建议使用静态批处理。
++1.6、物理组件
++++优化方案1: 设置一个合适的Fixed Timestep。
++++优化方案2: 不要使用MeshCollider。
====>从优化的角度来看,尽量少用物理组件。
++1.7、GC(Garbage Collection垃圾回收)
++++优化方案: 减少CPU对GC的调用。
++++字符串连接的处理。
--因为将两个字符串连接的过程,其实是生成一个新的字符串的过程。而之前的旧的字符串自然而然就成为了垃圾。而作为引用类型的字符串,其空间是在堆上分配的,被弃置的旧的字符串的空间会被GC当做垃圾回收。
++++尽量不要使用foreach,而是使用for。
--foreach其实会涉及到迭代器的使用,而据传说每一次循环所产生的迭代器会带来24Bytes的垃圾。那么循环10次就是240Bytes。
++++不要直接访问gameObject的tag属性。
--比如if(go.tag ==“立钻哥哥”)最好换成if(go.CompareTag(“立钻哥哥”))。
--因为访问物体的tag属性会在堆上额外的分配空间。如果在循环中这么处理,留下的垃圾就可想而知了。
++++使用“池”,以实现空间的重复利用。
++++最好不用LINQ的命令,因为它们会分配临时的空间,同样也是GC收集的目标。
--在某些情况下LINQ无法很好的进行AOT编译。
--比如“OrderBy”会生成内部的泛型类“OrderedEnumerable”。这在AOT编译时是无法进行的,因为它只是在OrderBy的方法中才使用。所以如果你使用了OrderBy,那么在IOS平台上也会报错。
++1.8、代码质量
++++不要频繁使用GetComponent,尤其是在循环中。
++++善于使用OnBecameVisible()和OnBecameInVisible()。
++++使用内建的数组,比如用Vector3.zero,而不是new Vector3(0, 0, 0)。
++++善于使用ref关键字。
++++将经常需要使用的属性查询缓存起来。
++++不要频繁使用Instantiate和Destroy。
++++习惯性的将暂时不用的GameObject设置为非激活。
#2、GPU优化
++2.1、减少绘制的数目
++++保持材质的数目尽可能少。
--这使得Unity更容易进行批处理。
++++使用纹理图集(一张大贴图里包含了很多子贴图)来代替一系列单独的小贴图。
--它们可以更快地被加载,具有很少的状态转换,而且批处理更友好。
++++如果使用了纹理图集和共享材质,使用Renderer.sharedMaterial来代替Renderer.material。
++++使用光照纹理(lightmap)而非实时灯光。
++++使用LOD,好处就是对那些离得远,看不清的物体的细节可以忽略。
++++遮挡剔除(Occlusion culling)。
++++使用mobile版的shader,简单。
++2.2、优化显存带宽
++++1、OpenGL ES2.0使用ETC1格式压缩等等,在打包设置那里都有。
++++2、使用MipMap。
++2.3、MipMap多级纹理
++++多级纹理:
--当屏幕变小时,自动选择合适尺寸的图片进行渲染。
--但会多使用33%的内存。
#3、 内存优化
++3.1、Unity3D内部的优化
++++1、Resource资源不用的要删除,纹理、网格、音频等等。
++++2、在CPU压力不是特别大的时候,重置GameObject、组件等占用的内存。
++++3、在大AssetBundle的时候,可以考虑bundle的压缩。
#立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++立钻哥哥推荐的拓展学习链接(Link_Url):
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft : lovezuanzuan--_--