码迷,mamicode.com
首页 > 编程语言 > 详细

Unity资源加载与释放

时间:2018-06-03 21:31:10      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:sources   释放   mes   现象   自动   instant   贴图   toc   https   

 Unity资源加载与释放

参考资源

http://www.cnblogs.com/freebird92/archive/2013/03/12/2955888.html
http://www.taidous.com/bbs/article-445-1.html

AssetBundle 与 Resources的区别

Resources相当于Unity一个缺省的AssetBundle。
AssetBundle可以在使用时动态加载。
Resources.load();在没有第一次Instantiate之前没有完全加载Asset资源。所以相对AssetBundle去实例一个资源,Resources会在第一次Instantiate时出现卡顿现象。

AssetBundle 加载与释放

AssetBundle的加载方式有:AssetBundle.LoadFromFile(“”); AssetBundle.LoadFromMemorty(byte[]);及WWW方式。 
AssetBunddle.LoadFromFile(“”);只有在standalone上可以使用。WWW在加载AssetBundle时,会在内部创建assetBundle实例。 
当AssetBundle被加载到内存后,其实内存中只有AssetBundle文件的镜像内存。//todo 该镜像文件是AssetBundle原文件大小? 
当需要具体某个Prefab等资源时,使用assetbundle.Load(“”);加载具体资源。此时内存中会存在此资源的 GameObject、shaders、材质、贴图等内存。当具体Instantiate一个资源时,会对此资源的Asset资源进行clone+引用操作。Clone的资源包括GameObject、Tranform。引用的资源包括Texture、TerrainData、Shader。引用与Clone同时存在的包括 Mesh、material、PhysicMaterial、noxss。引用的资源只是指针的指向。Clone的会重新生成新的内存。 
根据AssetBundle资源的加载方式,当资源释放时,如果只是Destroy,只会释放生成这个资源时Clone的那部分内存。assetBundle.Load(“”);加载的Asset内存没有被释放,AssetBundle的镜像内存也没有被释放。所以如果在该资源被销毁时需要使用Resources.UnloadUnuseAssets();去释放没有被使用的Asset资源内存。如果该AssetBundle不会被再使用可以使用AssetBundle.Unload(true)销毁内存。AssetBundle(true);代表销毁该AssetBundle镜像内存及所加载的Asset内存。参数为false时,代表只销毁镜像内存。 
下面的图片可以更形象的理解AssetBundle的加载与释放。 
技术分享图片

备注

当场景在切换时,Unity 会自动 把托管的内存释放,这其中包括Asset内存、Instantiate内存。但不会被释放的是AssetBundle镜像内存。
assetBundle.Load如果多次加载相同的资源,除第一次,其它都会返回第一次的对象。

Unity资源加载与释放

标签:sources   释放   mes   现象   自动   instant   贴图   toc   https   

原文地址:https://www.cnblogs.com/fangshiyuanzhucheng/p/9130013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!