Unity 资源管理

一 加载
Unity资源加载 主要分成2种方式 一种是 Resource.Load 还有一种是 外围读取 一般是 AB方式。

产生对象顺序
1.AssetBundle对象 通过 CreateWithFile WWW等操作产生。同时也会产生  WWW对象或者 serialize对象.
2.Asset对象  通过 AssetBundle.Load 产生。
3.GameObject 通过Instantiate 产生。

注意点
1. CreateWithFile 是通过创建序列化文件,而不是把所有Asset对象读到内存中,所以产生的中间的内存较小,但是Load的时候会产生IO操作。 CreateWithMemory WWW都是把所有Asset读到内存中,产生的中间内存较大、Load快。所以如果需要多次Load的建议用WWW。而其他的建议一次LoadAll。
2. Resource.Load也是类似于CreateWithFile的实现。通过ResourceManager 的remapping 记录文件路径与offset. CreateWithFile是 通过PersistentManager.
3.AssetBundle在内存里不能产生2份。但是Asset可以。所以当创建一个AssetBudnle对象时,卸载选择不清楚Asset对象。是可以再次加载的,同时再次load还会产生Asset。造成内存泄露。
4.产生的 WWW对象或者serialize对象会在你卸载掉AssetBundle对象或WWW.Disposse() unity自动清除掉。
5.所以建议的方式是 CreateWithFile或者其他方式创建后,立即删除AssetBundle对象,且不强制删除Asset对象。把当前Asset做一次缓存。缓存结束后,移除Asset对象。

二 卸载
1. GameObject 通过 Destroy卸载
2. Asset对象通过 Resources.unload() 或者 Resources.UnloadUnusedAssets()
3. AssetBundle对象通过 AssetBundle().unload 卸载

注意点
1. Resources.UnloadUnusedAssets 会产生较多性能损耗,所以非loading界面最好不要调用。可以通过制定Asset进行卸载。(如果内存吃紧,打开大UI时可以调用 Resources.UnloadUnusedAssets 不会产生太久卡顿)
2. AssetBundle.Unload 参数含义是 是否强制卸载它产生的Asset对象。所以如果对Asset对象进行了缓存,需要填false。
3. Destory 是在下一帧删除。本帧只是标识。如果gameObject比较大,可以采用每帧destory处理。

总结
资源管理层的结构大概应该是
1. Load层 (负责 Resouces.Load 还是 CreateWithFile或者 WWW方式) 产生 Asset对象。本层对AssetBundle对象进行管理。尽量生产即卸载。
2. Asset层 负责缓存Asset对象(缓存策略可通过插件模式分成多种) 同时产生 GameObject对象。
3. Cache层 负责缓存GameObject对象。
4. 外围只需接触 Cache层 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值