关于unity中使用assetbundle的问题

1回答

关于unity中使用assetbundle的问题

提问者 醒目 2015-12-03 1.7k浏览

目前我们对于assetbundle的使用是,把怪物的模型、贴图、动画等做成预设,然后把预设做成assetbundle。
对于一些频繁使用的bundle,只做assetbundle.unload(false)释放,而对于那些非必需的资源或者是出现频率较少的资源使用assetbundle.unload(true)来进行释放。

我们的问题就是,使用assetbundle.unload(true)来释放代价还是有点大(没释放前WebStream占用了一部分内存),
所以,加载完毕之后能否对所有的资源都先进行一次unload(false)释放,然后再使用Resources.UnloadAsset接口进行释放呢?但按unity官方的说法,Resources.UnloadAsset这个接口只能对
外部的独立资源进行释放,例如:纹理,网格,动画等;如果是这样,我们在assetbundle的组织上应该怎么来做?是需要自己把独立的外部资源组织成需要的游戏对象吗?


请问关于assetbundle使用有没有可以借鉴的解决方案呢?


上下文:问题类型 : 内存管理     开发平台 : Windows 7     发布平台 : ios,Android     Unity 版本 : Unity Pro     版本号 : 4.6.7f1

快来消灭0回答吧

{{ dataList.answer_count | view-format }}回答
  • Unity官方专家 2015-12-07 15:29

    一般在实际的使用AssetBundle加载资源的项目中,释放资源的步骤有这几步:
    1、AssetBundle.Unload(false)一次性释放掉没有被load过资源;
    2、Object.Destory() 把一个gameObject(或者一个组件)本身及其所有组件销毁
    3、Resources.UnloadAsset() 把 步骤2 中销毁的gameObject引用到的资源销毁,这一步在2之后是因为gameObject还保留有对资源的引用,当资源被使用时还会自动load进来。

    主要需要理解的一点是,Unity里gameObject和Component本身不是外部资源,都是通过Destory() 来销毁的,而当一个外部资源没有任何object引用到它的时候就可以用UnloadAsset来释放掉。



    unity4.x版本官方没有提供范例,但是对于5.x新版assetbundle官方提供了可以参考的例子,如果有计划升级unity可以参考下:http://forum.unity3d.com/threads/new-assetbundle-build-system-in-unity-5-0.293975/

    0评论
  • {{ answer.user.NickName }} {{ answer.profession }} {{ answer.created_at | time-format }}
    专家回答
    {{{ answer.answer }}}
    {{ answer.answer_count | view-format }}评论
加载中... 查看更多回答