Unity资源加载以及释放

来源:互联网 发布:js push json 编辑:程序博客网 时间:2024/05/29 16:05
1.系统在加载新场景时,所有的内存对象都会被自动销毁,但是不包括assetbundle文件自身的内存镜像,因为该assetbundle镜像是非托管的。

2.同一个assetsbundle文件在没有释放之前不能重复加载。

3.Destroy 主要用于销毁克隆的对象,不会自动释放该对象的所有引用。

4.AssetBundle.Unload(false)释放AssetBundle文件内存镜像。

5.AssetBundle.Unload(true)释放文件内存镜像同事销毁所有Load的Assets内存对象。

6.Resources.UnloadAsset(Ojbect)。释放非Component组件的资源(如贴图、音效、材质球等)

7.Resources.UnloadUnusedAssets。释放所有无引用的资源对象,哪怕有一个引用指向该资源对
象,也无法释放(如需要释放的资源为b, Object a = b 因为a引用了b 所以释放b不成功)。

8.GC.Collect()强制立即释放无效引用垃圾。固定时间调用一次。

9.第一次Instaniate一个Prefab会卡的原因是该Asset对象还未创建在内存中,即使你Destroy该对象,但该Asset还存于内存中,下次创建会快很多,除非释放该内存对象。

10.AssetsBundle加载资源,会有两份内存的消耗,一份是Assets镜像本身,一份的克隆出来的Assets镜像,该克隆出来的镜像用于反复多次克隆,但不会消耗额外的第三份内存,所以在LoadAssetsBundle的时候根据情况如无需重复克隆该对象最好释放一下Unload(fasle)该镜像本身的内存,这样内存中只存在一份这样的内存节省了大量内存。

11.PC端本地加载AssetBundle,必须在URL 前 加 "file://",而且 还需要后缀名。
例如,"file://+Application.dataPath+"/test.assetbundle"

12.可通过几种方法转换AssetBundle
www.assetBundle 直接获取AssetBundle

AssetBundle.LoadFromMemory(www.bytes) 将byte数组同步加载成AssetBundle

AssetBundle.loadFromMemoryAsync(www.bytes) 将byte数组异步加载成AssetBundle,异步加载AssetBundle不推荐使用,在yield return等待结束后 返回的结果都可能为还没加载成功。



原创粉丝点击