1.Unity进阶UniTask概述及安装

1.概述


1.1 知识点

UniTask 是什么

UniTask 是专为 Unity 设计的高性能、零 GC 的 async/await 异步解决方案。它优化了传统的异步编程方式,解决了 Unity 协程与 C# 原生 Task 的不足,为开发者提供了更高效、简洁的异步开发体验。

为什么要使用 UniTask?

协程的缺点:
  • 依赖 Monobehaviour
  • 无法进行异常处理
  • 方法返回值获取困难
C# 原生 Task:
  • 优点
    • 不依赖 Monobehaviour
    • 支持异常处理
  • 缺点
    • Task 消耗大,涉及跨线程操作

核心特性

  • 零堆内存分配
    基于值类型的 UniTask<T> 与自定义的 AsyncMethodBuilder 实现零 GC 开销。

  • 支持 Unity 异步对象
    使所有 Unity 的 AsyncOperationCoroutine 均可直接 await

  • 基于 PlayerLoop 任务
    UniTask.YieldUniTask.DelayUniTask.DelayFrame 等方法可替换传统协程操作,且无需线程支持,可在 WebGL、wasm 等平台上运行。

  • 丰富的异步扩展
    对 MonoBehaviour 消息事件、uGUI 事件提供可等待/异步枚举扩展;并内置 Channel 与 AsyncReactiveProperty 支持异步 LINQ。

  • 内置工具支持
    提供 TaskTracker EditorWindow 以追踪所有 UniTask 分配,帮助预防内存泄漏。

相关博客文章:

常见 API

延时操作
  • Delay
  • DelayFrame
  • Yield
  • NextFrame
  • WaitForEndOfFrame
等待操作
  • Wait Until
  • Wait Until Value Changed
条件操作
  • When All
  • When Any
异步委托生成 UniTask 及相关封装
  • UniTask.Void
  • UniTask.Defer
  • UniTask.Lazy
UniTask 对部分 Unity 对象的扩展
  1. 异步操作的等待(协程)
  2. UGUI 方法的等待(进阶)
  3. Monobehaviour 的等待(进阶)
取消
  • 两种方式:
    1. 创建 CancellationToken
    2. 使用 GameObjectGetCancellationTokenOnDestroy()
异常处理
  1. Try Catch
  2. SuppressCancellationThrow
超时处理

通过 CancellationTokenSouce.CancelAfterSlim(TimeSpan) 设置超时,将 CancellationToken 传递给异步方法。

补充:async void 与 async UniTaskVoid 对比
  • Forget()
事件处理
  1. 异步事件通过 Lambda 表达式注册,使用 UniTask.ActionUniTask.UnityAction
  2. UGUI 事件转换为可等待事件:AsAsyncEnumerable
  3. MonoBehaviour 消息事件转换为异步流
异步 Linq
异步迭代器
响应式组件

安装UniTask

版本要求

确保您的 Unity 版本支持 Git 包路径查询参数:

  • Unity >= 2019.3.4f1
  • Unity >= 2020.1a21

在 Package Manager 中安装

在 Unity 的 Package Manager 中添加以下链接即可安装:

https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask


或在 manifest 文件中添加依赖

您也可以手动编辑 Packages/manifest.json 文件,添加如下内容:

{
  "dependencies": {
    "com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"
  }
}

指定版本安装

UniTask 使用 *.*.* 发布标签来指定版本。如果需要安装指定版本,可在链接后附加版本标签。例如,要安装 2.1.0 版本,可使用以下链接:

https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.1.0


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏