赞
踩
了解一下加载AB和实例化操作对应的内存变化,有助于我们更好的理解内存管理
这是各阶段的内存和其他数据变化
说明:
综上:
Texture加载以后是到内存,显示的时候才进入显存的Texture Memory。 所有的东西基础都是Object Load的是Asset,Instantiate的是GameObject和Object in Scene Load的Asset要Unload,new的或者Instantiate的object可以Destroy
一、ab加载与释放
二、实例化
一个Prefab从assetBundle里Load出来,里面可能包括:Gameobject、transform、mesh、texture、material、shader、script和各种其他Assets。
你 Instaniate一个Prefab,是一个对Assets进行Clone(复制)+引用结合的过程,GameObject、transform 是Clone是新生成的。
总结一下各种释放
例子1:
一个常见的错误:
因为在你第一次Instaniate之前,相应的Asset对象还没有被创建,要加载系统内置的 AssetBundle并创建Assets。第一次以后你虽然Destroy了,但Prefab的Assets对象都还在内存里,所以就很快了。
例子2:
由此可以引申出论坛里另一个被提了几次的问题,如何加载一堆大图片轮流显示又不爆掉?
不考虑AssetBundle,直接用www读图片文件的话等于是直接创建了一个Texture Asset 假设文件保存在一个List里
TLlist
这样可以保证内存里始终只有一个巨型Texture Asset资源,也不用代码追踪上一个加载的Texture Asset,但是速度比较慢
或者:
IEnumerator
这样卸载比较快
Unity3D内存释放 (很详细的)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。