unity memory management - woodelf-treetop/rcwiki GitHub Wiki
只讨论当前 Asset,GameObject 这一套,不讨论 AddressableAsset、ECS 等等。
只讨论基于Bundle加载卸载资源,不讨论更早期使用的 Resources.Load
Asset
bundle
- Resources.UnloadAsset(asset) 只能释放非 GameObject 类型的 Asset
- GameObject.DestroyImmediate(asset, true) 非常可怕,据说可用于释放 GameObject,但实测下来,它在 UnityEditor下,会修改本地数据,在手机上也会破坏bundle中的数据(如果bundle卸载了,再重新加载就好了);另外,这个操作并不释放 GameObject 引用到的其他资源,比如挂在 GameObject 上的材质和纹理。别用。
- 由于Unity的bug,在较老的unity版本(包括2017)中, GameObject 上挂着的 Texture,并不会被 Resources.UnloadUnusedAssets 所释放。需要先 GC.Collect ,然后等一帧再调用 UnloadUnusedAssets。(在unity2017的实测中,发现不必等一帧,纹理也被释放了…但是先GC是必要的)