Unity内存不足问题

项目随着资源量越来越大,编译的时候出现

Unity(44357,0xa0f1a1d4) malloc: *** mach_vm_map(size=8388608) failed (error code=3)
*** error: can't allocate region

最初是编译4次会有1次出现这样的问题(偶现),到最后是每次都出现。刚开始以为就是编译机器的内存空间不足导致的,查看mac机器的内存,在编译过程中确实存在只有10M+可用内存的情况。后来采购了一台16G的Mac Mini,但是编译也会出现内存不足的情况。

所以开始怀疑不是机器的问题。后来通过Unity官方了解到Unity 4.x系列的版本都是32位的,那最大的可用内存也就在3G左右。我们在编译的时候,追踪Unity的内存情况,发现也在3G的时候Crash。

基于这样的现实,我们有几个方案:

  1. 更新Unity版本到5.x系列

  2. 把部分资源变成资源更新

  3. 把部分资源打成Bundle放在StreamAssets下面

其中第1中方案的代价很高,提醒版本带来的问题会无法预估。

第2中方案会让玩家每次都更新资源,而且制作流程,编译流程会变得复杂。还有一点就是随着我们的内存原来越多,资源量会越来越大,那资源更新的内容也会不可控

第3中方案编译流程会变得复杂,StreamAssets下的内容也不可控。

回到本质上考虑这个问题,我们游戏包只有500M的资源,为什么在Unity上需要消耗3G+的内存呢?即使考虑压缩的问题,也不至于这么夸张。此时会想到我们项目有部分的资源是开发需要的目录(Art),真机中不需要的,那Unity会不会加载到内存呢?于是直接删除后编译,发现没有问题了。

我只想说:

出来混,迟到要还的

最后的处理方案是编译的时候,删除那些目录