【Unity】AB包资源管理(二)

本文详细介绍了Unity中的AssetBundle卸载过程,强调了`Unload`方法的`unloadAllLoadedObjects`参数影响。不正确卸载可能导致内存中的对象重复或丢失,建议在场景切换或对象不再使用时卸载AssetBundle。文中提到了两种卸载策略:按场景节点卸载和维护引用计数。还讨论了使用`Unload(false)`时如何卸载单个对象的方法,以及重新加载对象可能遇到的问题和解决策略。

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

一、概述

由本地存储上的文件(在Unity缓存中或通过AssetBundle.LoadFromFile加载的文件)支持的AssetBundle具有最小的内存开销,很少消耗超过几十KB的内存。但是,如果存在大量资源依赖关系,则此开销仍然会成为问题(仅是文件头的问题

二、 AB包卸载

由于大多数项目允许用户重复体验内容,因此了解何时加载或卸载资产绑定非常重要。如果未正确卸载AssetBundle,可能会导致内存中的对象重复。在某些情况下,不正确地卸载资产绑定也可能导致不良行为,例如导致纹理丢失。

管理资产和资产绑定时需要了解的最重要的一点是调用AssetBundle.Unload时的行为差异,即unloadAllLoadedObjects参数为true或false。

此API将卸载正在调用的AssetBundle的头信息。unloadAllLoadedObjects参数确定是否也卸载从该AssetBundle实例化的所有对象。如果设置为true,则源自AssetBundle的所有对象也将立即卸载–即使它们当前正在活动场景中使用。

例如,假设材质M是从AssetBundle AB加载的,并且假设M当前在活动场景中。

如果调用AssetBundle.Unload(true),那么M将从场景中移除、销毁并卸载。但是,如果调用AssetBundle.Unload(false),则AB的头信息将被卸载,但M将保留在场景中,并且仍然可以正常工作。调用AssetBundle.Unload(false)会中断M和AB之间的链接。如果以后再次加载AB࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值