Assetbundle(一)引用计数方案设计

本文探讨了Unity中Assetbundle的引用计数设计方案,分为资源引用计数和assetbundle引用计数两层管理。资源按类型分为material、prefab和特殊情况如文本,而assetbundle的引用包括直接、间接引用及特殊场景。释放资源时不涉及assetbundle,而统一接口处理assetbundle的释放,选择不频繁的时机避免频繁操作,以应对可能的重新引用情况。

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

 

下一篇:Assetbundle(二)热更新方案设计

 

Assetbundle通常需要设计引用计数来管理,根据引用计数的情况决定是否释放。这里介绍一种方案和实现。先阐述下思路。

整个把方案把引用计数分为两层,分别管理。

1.资源的引用计数:记录每个资源,被引用的对象(Gameobject)。

2.assetbundle的引用计数:记录每个assetbundle被引用的资源(资源路径)。

只有没有被引用的资源才需要释放其引用的assetbundle。assetbunle在释放时检查自己还有没有被其他资源引用,如果没有才释放。

释放资源时只关心资源,而不关心assetbundle。而assetbundle的释放是一个统一的接口,统一释放无用的assetbundle。在一个不是很频繁的时机释放这些无用的assetbundle,比如内存不够时(unity能自己捕获),进入关卡和退出关卡时。这么做主要基于两点原因

1.资源和assetbundle分别管理,逻辑比较简单些,引用计数也更容易设计。相信写过assetbundle相关程序会有所体会。而且本质上这个过程都是两大步骤,加载了bundle才能加载资源,两层;Gameobject不用了需要destroy,第一层,其对应的assetbundle释放,第二层。

2.不频繁做释放assetbundle的动作,主要考虑到很多情况下,刚刚没有引用了,过不久又要被引用了。我见过有类设计是延迟释放,比如弄过待释放列表,过一会儿再释放。个人理解这种设计的问题在于,等多久?其实等多久都不合适。反而把逻辑变得更复杂了。

下面在分别对资源和assetbundle的引用情况做分类分析:

资源的引用计数分为3类

1.material,texture之类,最终是被Gameobject引用

2.prefab,最终是被Gameobject引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值