您的位置:首页 > 移动开发 > Unity3D

如何优化内存?Unity中的内存种类;冯乐乐的总结的优化技术

2018-06-28 12:04 218 查看

1 。 有很多种方式例如1.压缩自带类库;2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;3.释放AssetBundle占用的资源;4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。

LOD技术有点类似于Mipmap技术,不同的是,LOD是对模型建立了一个模型金字塔,根据摄像机距离对象的远近,选择使用不同精度的模型。它的好处是可以在适当的时候大量减少需要绘制的顶点数目。它的缺点同样是需要占用更多的内存,而且如果没有调整好距离的话,可能会造成模拟的突变。
在Unity中,可以通过LOD Group来实现LOD技术:

Unity中的内存种类

实际上Unity游戏使用的内存一共有三种:程序代码、托管堆(Managed Heap)以及本机堆(Native Heap)。

优化程序代码的内存占用

主要就是减少打包时的引用库,改一改build设置即可,库剥离的优化方法。

托管堆,托管”的意思是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, 宽带优化:减少纹理大小,利用缩放。

转自:https://blog.csdn.net/taotaoah/article/details/52484439

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: