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秒経過しました");
}
  • 使ったことないが、最新式で軽量でおすすめらしい

マルチ集団(Multi-Group)

小さな抵抗 大きな勘違い

おすすめ記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です