Unity | 资源释放底层原理

目录

一、Resource.UnloadAsset

二、YooAsset资源释放

三、Destory

四、OnDestroy


一、Resource.UnloadAsset

        Resource.UnloadAsset,可以用来卸载AB加载的asset,后续从AB加载新的asset也没问题,卸载依赖AB的asset也可以。并且发现一点,如果场景上有asset的引用,调用该接口并不会卸载asset,需要asset引用的实例对象都被销毁后再调用UnloadAsset接口才会卸载。(只会卸载特定的资源,而不会影响其他仍在使用的资源。)

        在Unity中,AssetBundle.Unload 方法用于卸载已经加载的AssetBundle资源。这个方法接受一个布尔参数,该参数决定是否卸载AssetBundle中包含的所有对象。

  • 当调用 AssetBundle.Unload(true) 时,这意味着想要卸载AssetBundle以及它所包含的所有资源。这包括任何已经从AssetBundle中加载的资源,如纹理、模型、音频等。使用这个方法时要非常小心,因为如果有其他地方还在引用这些资源,那么这些引用将会变成空引用,可能导致运行时错误或者异常行为。
  • 在调用 AssetBundle.Unload(false) 时,AssetBundle的内存将会被释放,但是实际的资源,比如从Asset
### Unity 协程的底层实现机制 #### 1. 协程的基础概念 协程是一种特殊的函数,可以在执行过程中暂停并在稍后的时间点恢复。在 Unity 中,协程通过 `IEnumerator` 接口来定义,并使用 `StartCoroutine` 方法启动。每次遇到 `yield return` 关键字时,当前方法会返回给调用者,并在满足特定条件后再继续执行。 #### 2. 协程的工作流程 当一个协程被启动时,Unity 将其加入到内部的任务队列中。每帧更新时,引擎会遍历这些任务并尝试推进它们的状态。如果协程中的 `MoveNext()` 返回 `true`,则表示还有更多工作要做;反之,则意味着协程已完成[^2]。 #### 3. Yield Return 的作用 `yield return` 是控制协程行为的关键语法结构。它允许开发者指定何时以及如何暂停和恢复协程: - **立即完成**: 如果 `yield return null;` 或其他非等待对象,则下一次 Update 循环就会继续执行。 - **延迟执行**: 使用像 `WaitForSeconds(float seconds)` 这样的特殊类可以让协程暂停一段时间再继续运行。这类指令继承自 `YieldInstruction` 类,在内部维护着一个布尔属性 `keepWaiting` 来指示是否应该保持挂起状态直到时间到达[^4]。 ```csharp // 示例:创建一个简单的延时打印消息的协程 IEnumerator DelayedMessage() { Debug.Log("Starting..."); // 延迟三秒钟 yield return new WaitForSeconds(3); Debug.Log("Finished after delay."); } ``` #### 4. 处理复杂逻辑 对于更复杂的场景,比如多个并发的操作或是依赖于外部事件触发的情况,可以利用嵌套协程或者监听器模式等方式来进行管理。不过要注意合理规划资源释放等问题以免造成内存泄漏或其他异常状况发生[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值