Unity网络交互☀️AssetBundle三、:AssetBundle的内存优化

本文详细介绍了在Unity中如何有效管理AssetBundle资源,包括卸载AssetBundle、从AssetBundle加载的Assets、实例化出的GameObject及WebStream的多种方法。通过AssetBundle.Unload、Resources.UnloadUnusedAssets、GameObject.Destroy等API,以及对WWW对象和WebStream数据的正确处理,确保游戏资源的合理利用和内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在这里插入图片描述

目录

🟥 卸载AssetBundle:

🟧 卸载从AssetBundle加载的Assets:

🟨 卸载实例化出的GameObject

🟩  卸载Web Stream


🟥 卸载AssetBundle:

AssetBundle.Unload

详细介绍见:地址

🟧 卸载从AssetBundle加载的Assets:

对于懂AssetBundle加载的Assets,比如纹理、材质、音频片段和动画片段有以下两种方式卸载

a、AssetBundle.Unload(true)

b、Resources.UnloadUnusedAssets()

该接口会卸载掉所有没有使用的Assets,需要注意的是:

1)、它的作用范围不仅仅是当前的AssetBundle,而是整个系统

2)、它不能卸载从当前AssetBundle文件中加载的仍在使用的Assets

🟨 卸载实例化出的GameObject

对于由GameObject.Instantiate实例化出来的GameObject,有以下两种卸载方式

a、GameObject.Destroy(推荐)

b、GameObject.DestroyImmediate

🟩  卸载Web Stream

WWW对象和WWW.assetbundle属性所加载的AssetBundle对象会被Web Stream数据持有引用,

AssetBundle也会引用到从他所加载的所有Assets,

WWW和AssetBundle对象只是一个结构指向了Web Stream数据,

真正的数据都是存放在Web Stream数据中,例如纹理、模型。

1)、对于WWW对象本身,使用的方法有两种:

a、www=null

不会即时引起内存释放操作,而是在系统自动垃圾回收时进行释放

b、WWW.dispose

会即时调用系统的垃圾回收操作来进行内存释放 。WWW对象释放后,其对于Web stream数据的引用计数也会相应减1

2)、对Web Stream数据,其所占用的内存会在其引用计数为0时,自动被系统进行释放。

如下图所示,即当AssetBundle对象(WWW.assetbundle)WWW对象释放后,Web Stream数据所占的内存也会被系统自动回收

 

 

 

大家还有什么问题,欢迎在下方留言!


 

在这里插入图片描述


如果你有 技术的问题 或 项目开发

都可以加下方联系方式

和我聊一聊你的故事🧡

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值