1 。 有很多种方式
例如
1.压缩自带类库;
2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
3.释放AssetBundle占用的资源;
4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。
Unity中的内存种类
实际上Unity游戏使用的内存一共有三种:程序代码、托管堆(Managed Heap)以及本机堆(Native Heap)。
优化程序代码的内存占用
托管堆,
托管”的意思是Mono“应该”自动地改变堆的大小来适应你所需要的内存,并且定时地使用垃圾回收(Garbage Collect)来释放已经不需要的内存。
首先需要明确,托管堆中存储的是你在你的代码中申请的内存。
你要做的就是在尽可能早的时间将不需要的引用去除掉,这样回收机制才能正确地把不需要的内存清理出来。但是需要注意在内存清理时有可能造成游戏的短时间卡顿,这将会很影响游戏体验,因此如果有大量的内存回收工作要进行的话,需要尽量选择合适的时间。
本机堆的优化
当关卡呈现在用户面前的时候,所有Unity编辑器能认识的本关卡的资源都已经被预先加入内存了,
因为移动设备能使用的资源始终非常有限。因此在面向移动设备游戏的制作时,尽量减少在Hierarchy对资源的直接引用,而是使用Resource.Load的方法,在需要的时候从硬盘中读取资源,在使用后用Resource.UnloadAsset()和Resources.UnloadUnusedAssets()尽快将其卸载掉。
尽量减少代码的耦合和对其他脚本的依赖是十分有必要的。如果确实无法避免这种情况,那应当手动地对这些不再使用的引用对象调用Destroy()或者将其设置为null。这样在垃圾回收的时候,这些内存将被认为已经无用而被回收。
三、冯乐乐的总结的优化技术。
有两种主要的计算资源:CPU(负责其中的帧率)和GPU(负责分辨率相关的一些东西)。
总结起来的性能瓶颈在于以下四点:
1,在CPU方面:过多的DrawCalls;复杂的脚步或者物理模拟。
2,在顶点处理方面:过多的顶点;过多的逐像素计算。
3,在像素(Fragment)处理方面:过多的fragment, overdraws;过多的住像素计算。
4,在宽带方面:尺寸很大且未压缩的纹理;分辨率过高的framebuffer。
所以涉及到的优化技术有以下几点:
1,顶点优化方面:
A,优化几何体;(尽量减少模型中的三角形的数目,尽可能重用顶点)
B、使用LOD(Level of details)技术;
C、使用遮挡剔除(Occulusino culling)技术。
2, 像素优化方面:控制绘制顺序;警惕透明物体;减少实时关照。
3, CPU优化方面:减少DrawCalls。
4, 宽带优化:减少纹理大小,利用缩放。