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




