UniTask
Github: https://github.com/Cysharp/UniTask
Licenece: MIT License.
Install from git url: https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
簡介
簡單來說可以用C# async/await 去取代原本Unity中需要用Coroutine的地方,
好處:
- 不需要有Monbehavior (改善整體架構、Editor也能用)
- Code寫起來比較乾淨好看
基礎用法
單一等待
// 用Addressables的初始化示範
public async void InitAsync(Action<bool> _callback) {
AsyncOperationHandle<IResourceLocator> handle = Addressables.InitializeAsync();//先初始化
await handle;
_callback?.Invoke(handle.Status);
}
帶回傳值的Async function
// 用Addressables的初始化示範
public override async UniTask<bool> InitAsync() {
AsyncOperationHandle<IResourceLocator> handle = Addressables.InitializeAsync();//先初始化
await handle;
return handle.Status == AsyncOperationStatus.Succeeded;
}
一次等待多個UnTask,並取得所有回傳值
public async void InitAsync(Action _callback) {
List<UniTask<bool>> initTaskList = new List<UniTask<bool>>();
initTaskList.Add(InitAsync());
initTaskList.Add(OtherAsyncFunc1());
initTaskList.Add(OtherAsyncFunc2());
initTaskList.Add(OtherAsyncFunc3());
bool[] results = await UniTask.WhenAll(initTaskList);
_callback?.Invoke();
}
更多用法
更多用法請參考Github https://github.com/Cysharp/UniTask
- 相較Unity Coroutine,try-catch寫起來也更方便
- Timeout handling
- Progress
- ...