Unityで使うC#プログラムでのそれぞれの待機処理の特徴や違い
コルーチン
using UnityEngine; using System.Collections; public class MyScript : MonoBehaviour { // コルーチンを呼び出す関数 void Start() { StartCoroutine(MyCoroutine()); } // コルーチン関数 IEnumerator MyCoroutine() { // 何かしらの処理 Debug.Log("処理開始"); // 2秒間待つ yield return new WaitForSeconds(2f); // コルーチンを終了 yield break; } }
- 柔軟
- using System.Collections;が必要
- 個人的に読みにくい
- StartCoroutine(MyCoroutine());←文字列じゃなくて関数で呼び出したほうが便利
- コルーチン中にデストロイされると、処理が強制終了
Invoke
using UnityEngine; public class MyScript : MonoBehaviour { void Start() { // 2秒後にMyFunction関数を呼び出す Invoke("MyFunction", 2f); } void MyFunction() { Debug.Log("2秒後に実行されます"); } }
- つづり覚えれない(Inボケ)
- シンプル→引数使えない(単純に待つのみ)
- デストロイされても、復活できる
- Invoke(“MyFunction”, 2f);→文字列で渡すのでタイプミス注意
DOTween
using UnityEngine; using DG.Tweening; public class MyScript : MonoBehaviour { void Start() { // 2秒後にMyFunctionを実行 DOVirtual.DelayedCall(2f, () => MyFunction()); } void MyFunction() { Debug.Log("2秒後に実行されました"); } }
- コードがシンプルでよみやすい
- ほかにも色んなことできる
- 負荷はおなじぐらい
- using DG.Tweening;が必要
- パッケージマネジャーからインストールが必要
- デストロイされるとエラーになる
UniTask
using Cysharp.Threading.Tasks; async UniTask StartAsync() { // 2秒待つ await UniTask.Delay(TimeSpan.FromSeconds(2)); Debug.Log("2秒経過しました"); }
- 使ったことないが、最新式で軽量でおすすめらしい