Unity3d 如何优化内存

前言:一提到内存这个东西我相信很多做技术的都头大,我也不例外,如何平衡内存值和手游的表现真的是需要去反反复复去琢磨的。下面记录下我们游戏的内存优化以及一些技巧

  • 首先我们需要一个目标,也就是我们需要把我们游戏优化到什么程度算是比较能接受的?

这个问题要看游戏类型把,比如我们这种3d arpg的游戏还是带水墨风格的就会非常吃力,因为很多水墨边都是半透明的资源。(换句话说我们这个能优化下来你的也一定可以做到)。我们综合了下游戏的表现和我们的硬件水平我们把内存值定在了250M 可用内存在500M的样子(王者荣耀差不多是这个数值)。我相信这个值目前的百元机随便达到了。

  • 常规的技巧:

你关闭了图片的mipmap 了吗? 这个东西是图片映射的时候需要用到的,但是我们的ui一般用不到。
你关闭了图片的write/read 功能了吗? 这个东西一般情况也用不到,因为你一般情况不会通过代码去重组图片
你的动作有勾选Optimize GameObjects 吗? 建议你关闭把,这个会很大程度印象你动画骨骼刷新,当然你要注意别把你的挂点也给关闭了。(轻松写个小插件做到)
你的模型有勾选write/read功能吗? 有关闭表情吗 ? 请关闭把,这些东西都不要的
你的其他贴图的格式都正确设置了吗? 请按照不同类型的图片格式分包设置把,不然你的内存会很容易爆掉了。

  • 上面都是一些常规的技巧,也就是我们所说的一般人都会的,如果你不会那么请对着做下,对你的内存会有非常大的影响。下面我要说说我们游戏中遇到的最大的问题。

第一个:Assetbundle的错误理解导致seriazedfile 值非常大。每个Assetbundle在加载的时候都会生成一个几十k的镜像内存,如果你不即使清理掉这部分你的内存就会非常大(unload(false))

第二个:我们游戏逻辑的bug,一般请看我相信我们都会有pool 这个东西,我们的也不例外搞了开源的pool 进行特效的缓存,而最后发现pool这个东西是根据名字来的,而不是更具instance id 来进行区别这个对象,所以导致pool 没有发挥出他应该有的功能。内存无限放大

说完了上面的问题,其实最重要的是我们如何来定位问题,如何找到对应的问题的原因,其实也没有特别的办法,请一定使用手机端的profiler功能,如果你非要使用电脑端来查看内存使用那么我只能说你在白忙活,电脑端统计得毫无卵用~具体如何使用请翻阅我之前的blog。

猜你喜欢

转载自blog.csdn.net/pdw_jsp/article/details/68946743