# UniTask ## Зачем это нужно `UniTask` нужен для эффективной `async/await`-работы в Unity без тяжелого стандартного `Task`-подхода. ## Сравнение официального источника и NuGet На момент проверки: - в официальном репозитории `Cysharp/UniTask` актуальный release: `2.5.10` от `2024-10-03` - на `nuget.org` актуальный пакет `UniTask`: тоже `2.5.10` Но для Unity это не означает, что пакет нужно ставить через `NuGet for Unity`. Официальный README разделяет сценарии так: - для Unity: `UPM` через `git URL` или `unitypackage` - для `.NET Core`: `NuGet` Дополнительно автор прямо указывает, что `.NET Core`-версия `UniTask` является subset по отношению к Unity-версии и не включает Unity-зависимый функционал, завязанный на `PlayerLoop`. Вывод для этого проекта: - версии на GitHub и NuGet совпадают - несмотря на это, для Unity-клиента нужно использовать официальный `UPM`-канал - `NuGet for Unity` для `UniTask` в этом проекте не является основным способом установки ## Как установить Предпочтительный способ для Unity-проекта: 1. Открой `Window > Package Manager`. 2. Нажми `+`. 3. Выбери `Add package from git URL...`. 4. Вставь: ```text https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.5.10 ``` 5. Нажми `Add`. Альтернатива: - импорт `unitypackage` из `Releases` ## Почему не через NuGet for Unity `NuGet for Unity` здесь стоит использовать только если нужен именно `.NET`-вариант для общего кода вне Unity-клиента. Для игрового Unity-проекта это плохой основной канал, потому что: - официальный Unity-сценарий у автора проходит через `UPM` - NuGet-вариант описан как `.NET Core` subset - Unity-специфичные возможности безопаснее получать из официального Unity-пакета ## Как настроить после установки После импорта дополнительной сложной инициализации обычно не требуется. Базовые шаги: 1. Дождись завершения импорта. 2. Убедись, что проект компилируется. 3. Проверь, что namespace доступен: ```csharp using Cysharp.Threading.Tasks; ``` ## Что важно для этого проекта Официальный README отдельно указывает: - у `UniTask` есть поддержка `Addressables` - у `UniTask` есть поддержка `DOTween` Поддержка `Addressables` включается автоматически после установки соответствующего пакета, а для `DOTween` нужна define-константа: ```text UNITASK_DOTWEEN_SUPPORT ``` Ее имеет смысл добавлять только после того, как `DOTween` уже установлен и реально используется. ## Минимальная практическая настройка для проекта Для первого этапа достаточно: - установить `UniTask` через `UPM` - убедиться, что namespace доступен - не переводить весь проект на `async/await` без явной необходимости ## Как проверить, что всё настроено - пакет установлен без ошибок - `using Cysharp.Threading.Tasks;` распознается - проект компилируется после установки ## Официальные источники - https://github.com/Cysharp/UniTask - https://github.com/Cysharp/UniTask/releases - https://www.nuget.org/packages/UniTask