Repolode
Cysharp

Cysharp/UniTask

Интеграция async/await без аллокаций для Unity, позволяющая ожидать асинхронные операции Unity, корутины и события PlayerLoop.

Звёзды
11,256
Форки
1,012
Открытые issues
26
Последний коммит
13 дней назад

Что это?

UniTask — это тип задач и интеграция async/await, созданные специально для Unity. Библиотека предоставляет основанный на структуре UniTask<T> с пользовательским построителем асинхронных методов, рассчитанным на отсутствие аллокаций, в качестве альтернативы стандартному Task. Асинхронные операции Unity, корутины и запросы UnityWebRequest можно ожидать напрямую, а ожидания кадров — Yield, Delay и DelayFrame — заменяют распространённые сценарии с корутинами.

Библиотека работает исключительно в PlayerLoop Unity, а не в потоках, поэтому подходит для таких платформ, как WebGL и WASM. В ней также предусмотрены отмена и тайм-ауты через CancellationToken, события MonoBehaviour и uGUI в виде ожидаемых или асинхронных потоков, а также асинхронный LINQ с Channel и AsyncReactiveProperty. Окно TaskTracker в редакторе помогает находить утёкшие задачи.

Для UniTask требуется Unity 2018.3 или новее с поддержкой task-like builder в C# 7.0. Установить библиотеку можно через UPM по git URL или из релиза unitypackage.

Ключевые возможности

  • 01Основанный на структуре UniTask<T> с пользовательским построителем асинхронных методов, рассчитанным на отсутствие аллокаций.
  • 02Возможность напрямую ожидать AsyncOperation, UnityWebRequest и корутины IEnumerator.
  • 03Ожидания Yield, Delay и DelayFrame на основе PlayerLoop заменяют распространённые ожидания в корутинах.
  • 04Работает в PlayerLoop без потоков, поэтому поддерживает WebGL и WASM.
  • 05CancellationToken, вспомогательные средства для тайм-аутов и окно TaskTracker в редакторе для поиска утечек.
  • 06Асинхронный LINQ, Channel и AsyncReactiveProperty для асинхронных потоков.

Сценарии использования

  • Замена корутин в игре на Unity кодом с async/await.
  • Последовательная или параллельная загрузка ресурсов и сцен, а также выполнение веб-запросов в Unity.
  • Создание проектов Unity для WebGL, где потоки недоступны.
  • Преобразование нажатий кнопок uGUI или событий MonoBehaviour в ожидаемые асинхронные потоки.

Темы

Частые вопросы

Что такое UniTask?
Интеграция async/await без аллокаций для Unity, позволяющая ожидать асинхронные операции Unity, корутины и события PlayerLoop. UniTask — это тип задач и интеграция async/await, созданные специально для Unity. Библиотека предоставляет основанный на структуре UniTask<T> с пользовательским построителем асинхронных методов, рассчитанным на отсутствие аллокаций, в качестве альтернативы стандартному Task. Асинхронные операции Unity, корутины и запросы UnityWebRequest можно ожидать напрямую, а ожидания кадров — Yield, Delay и DelayFrame — заменяют распространённые сценарии с корутинами.
UniTask можно использовать бесплатно? Какая у него лицензия?
UniTask распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
UniTask всё ещё поддерживается?
Активно поддерживается. Последний коммит в UniTask — 6 окт. 2026 г..
Для чего можно использовать UniTask?
Замена корутин в игре на Unity кодом с async/await. Последовательная или параллельная загрузка ресурсов и сцен, а также выполнение веб-запросов в Unity. Создание проектов Unity для WebGL, где потоки недоступны. Преобразование нажатий кнопок uGUI или событий MonoBehaviour в ожидаемые асинхронные потоки.
Где скачать UniTask?
Исходный код и инструкции по установке — на GitHub: https://github.com/Cysharp/UniTask

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты