以下是 UniTask 中各类 Wait 相关方法的系统性总结,按使用场景分类,包含核心功能、关键参数和典型用途:


一、条件等待(基于布尔条件)

方法 核心功能 适用场景 关键特点
WaitUntil 等待条件为 true 时结束等待 等待目标状态达成(如进度满、按钮点击) 条件满足则继续,侧重“等待出现”
WaitWhile 等待条件为 false 时结束等待 等待当前状态结束(如加载中、敌人存活) 条件成立则等待,侧重“等待消失”

二、时间等待(基于时间长度)

方法 核心功能 适用场景 关键参数/特点
UniTask.Delay 等待指定毫秒数 精确时间等待(支持实时/缩放时间) - 单位:毫秒
- DelayType
- DeltaTime(受 Time.timeScale 影响)
- RealTime(不受暂停影响)
UniTask.WaitForSeconds 等待指定秒数(等价于 Unity 原生 WaitForSeconds 简单秒级等待(受时间缩放影响) 单位:秒,与 Delay(秒数*1000) 效果类似

三、帧与更新时机等待(基于游戏循环)

方法 核心功能 适用场景 对应 Unity 原生类型
UniTask.Yield 等待当前帧结束,下一帧继续 每帧更新逻辑(如动画帧刷新) yield return null
UniTask.WaitForEndOfFrame 等待当前帧渲染结束 帧末操作(如截图、UI 最终布局) WaitForEndOfFrame
UniTask.WaitForFixedUpdate 等待下一次 FixedUpdate 调用 物理相关逻辑(如刚体受力、碰撞检测) WaitForFixedUpdate

四、对象/组件生命周期等待(基于对象状态)

方法 核心功能 适用场景 关键参数
UniTask.WaitUntilDestroyed 等待目标对象被销毁后继续 监听对象生命周期(如敌人死亡、道具消失) 传入 UnityEngine.Object(如 GameObjectComponent
UniTask.WaitWhileActive 等待对象/组件从激活变为禁用 监听激活状态结束(如面板关闭) 传入 MonoBehaviourGameObject
UniTask.WaitUntilActive 等待对象/组件从禁用变为激活 监听激活状态开始(如面板打开) 同上

五、多任务等待(基于多个异步操作)

方法 核心功能 适用场景 Task 类比
UniTask.WhenAll 等待多个 UniTask 全部完成后继续 并行任务(如多资源加载) 类似 Task.WhenAll
UniTask.WhenAny 等待多个 UniTask 中任意一个完成后继续 竞争任务(如多下载源取最快结果) 类似 Task.WhenAny

六、属性变化等待(基于值变更)

方法 核心功能 适用场景 依赖条件
UniTask.WaitForFirstValueChanged 等待目标对象的指定属性首次变化 监听数据变更(如分数、血量、配置更新) 目标对象需实现 INotifyPropertyChanged 或支持属性监听

总结表

分类 核心方法 核心逻辑概括
条件等待 WaitUntil / WaitWhile 基于布尔条件的“等出现”/“等消失”
时间等待 Delay / WaitForSeconds 基于毫秒/秒的时间间隔等待
帧时机等待 Yield / WaitForEndOfFrame / WaitForFixedUpdate 基于游戏循环的帧内/帧间时机
对象生命周期 WaitUntilDestroyed / WaitWhileActive 基于对象销毁/激活状态的等待
多任务协同 WhenAll / WhenAny 多个异步任务的“全完成”/“任一完成”等待
属性变化 WaitForFirstValueChanged 监听属性值首次变更的等待

通过这些方法,可覆盖游戏开发中几乎所有异步等待场景,相比 Unity 原生协程更简洁、高效,且支持 async/await 语法,大幅提升代码可读性。