コルーチンからUniTaskへの置き換え方
説明
UniTaskで、コルーチンと同じ挙動をさせるには
下記のコードのように記述するが
「yield return new WaitForEndOfFrame()」のみ、
同等の挙動をUniTaskで再現することは出来ないため、
「yield return new WaitForEndOfFrame()」を利用する場合は
コルーチンを使用する必要がある。
コード
using System;
using System.Threading;
using Cysharp.Threading.Tasks;
using UnityEngine;
public class Sample : MonoBehaviour
{
private void Start()
{
//非同期メソッドを起動
DoAsync(this.GetCancellationTokenOnDestroy()).Forget();
}
//コルーチンとほぼ同等の機能
private async UniTaskVoid DoAsync(CancellationToken token)
{
//yield return nullに相当
await UniTask.Yield();
//CancellationTokenを指定する場合
await UniTask.Yield(token);
//実行タイミングを変更することも可能
//yield return new WaitForFixedUpdate()に相当
await UniTask.Yield(PlayerLoopTiming.FixedUpdate, token);
await UniTask.WaitForFixedUpdate(token);
//UniTask.NextFrameの場合は
//必ず1フレーム経過する事を保障する
await UniTask.NextFrame(token);
await UniTask.NextFrame(PlayerLoopTiming.FixedUpdate, token);
//指定時間待機する
//yield return new WaitForSeconds()に相当
await UniTask.Delay
(TimeSpan.FromSeconds(1f), cancellationToken: token);
//条件を満たすまで待つ
//yield return new WaitUntil()に相当
await UniTask.WaitUntil
(() => num > 0f, cancellationToken: token);
}
}
コメント