Repolode
Cysharp

Cysharp/UniTask

面向 Unity 的零分配 async/await 集成库,让 AsyncOperation、协程和事件可直接 await,基于 PlayerLoop 运行。

Star
11,259
Fork
1,012
未关闭 Issue
26
最近提交
13天前

这是什么?

UniTask 是一个面向 Unity 的 C# 库,提供基于结构体的 UniTask<T> 类型和自定义的 async 方法构建器,目标是减少 async/await 代码中的堆内存分配。它可以直接 await Unity 的 AsyncOperation、协程(IEnumerator)以及 MonoBehaviour 消息事件,并提供基于 PlayerLoop 的 Delay、DelayFrame、Yield、WaitUntil 等方法,替代常见的协程写法。

UniTask 完全运行在 Unity 的 PlayerLoop 上,不使用线程或 SynchronizationContext,因此可以在 WebGL、WASM 等平台运行。库中还包括基于 CancellationToken 的取消与超时工具、用于排查任务泄漏的 UniTask Tracker 编辑器窗口、支持 await foreach 的异步 LINQ,以及 Channel 和 AsyncReactiveProperty 等类型。

该库要求 Unity 2018.3 或更高版本,可通过 UPM 的 git 地址安装,也可以使用 .unitypackage 导入。TextMeshPro、Addressables 和 DOTween 的集成以独立程序集的形式提供。

核心功能

  • 01基于结构体的 UniTask<T> 与自定义 async 方法构建器,减少内存分配。
  • 02可直接 await Unity 的 AsyncOperation、IEnumerator 协程和 uGUI 事件。
  • 03基于 PlayerLoop 的 Delay、DelayFrame、Yield、WaitUntil 替代常见协程写法。
  • 04提供 CancellationToken 取消、超时工具,以及用于排查泄漏的 TaskTracker 窗口。
  • 05支持异步 LINQ、Channel 和 AsyncReactiveProperty。

适用场景

  • 将 Unity 游戏中的协程逐步替换为 async/await 写法。
  • 在 Unity 中加载场景、资源或网络请求并等待其完成。
  • 在 WebGL 等不支持线程的平台上运行异步逻辑。
  • 使用可 await 的按钮点击或碰撞事件构建事件驱动的游戏逻辑。

快速上手

  1. 1

    通过带 git 引用的 UPM 包安装(参见 UPM Package 章节)

  2. 2

    或从 releases 页面下载资源包

  3. 3

    在脚本中添加命名空间以使用扩展方法

    using Cysharp.Threading.Tasks;

使用前须知

  • 需要 Unity 2018.3 或更新版本(官方最低支持版本为 2018.4.13f1)。
  • UniTask 不能被多次 await;若存为字段需使用 UniTask.Lazy 或 .Preserve()。

标签

常见问题

UniTask 是什么?
面向 Unity 的零分配 async/await 集成库,让 AsyncOperation、协程和事件可直接 await,基于 PlayerLoop 运行。 UniTask 是一个面向 Unity 的 C# 库,提供基于结构体的 UniTask<T> 类型和自定义的 async 方法构建器,目标是减少 async/await 代码中的堆内存分配。它可以直接 await Unity 的 AsyncOperation、协程(IEnumerator)以及 MonoBehaviour 消息事件,并提供基于 PlayerLoop 的 Delay、DelayFrame、Yield、WaitUntil 等方法,替代常见的协程写法。
UniTask 可以免费使用吗?用的什么许可证?
UniTask 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
UniTask 还在维护吗?
活跃维护中。UniTask 最近一次提交是在 2026年10月6日。
UniTask 适合用来做什么?
将 Unity 游戏中的协程逐步替换为 async/await 写法。 在 Unity 中加载场景、资源或网络请求并等待其完成。 在 WebGL 等不支持线程的平台上运行异步逻辑。 使用可 await 的按钮点击或碰撞事件构建事件驱动的游戏逻辑。
UniTask 怎么安装和运行?
通过带 git 引用的 UPM 包安装(参见 UPM Package 章节) 或从 releases 页面下载资源包 在脚本中添加命名空间以使用扩展方法: using Cysharp.Threading.Tasks;
在哪里获取 UniTask?
源代码和安装说明在 GitHub 上:https://github.com/Cysharp/UniTask

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目