【Unity】1フレーム待つ方法。WaitForEndOfFrameとreturn nullの使い分け方

(2025/03/03)
【Unity】1フレーム待つ方法。WaitForEndOfFrameとreturn nullの使い分け方

開発環境
  • Unityのバージョン : 6000.0.36f1
  • Unityでゲーム開発をしていると、「1フレームだけ処理を待ってから次の処理を実行したい」という場面がよくあります。
    例えば、
    オブジェクトが生成された直後に、そのオブジェクトに対して処理を行いたい。
    アニメーションの再生が完了してから、次の処理に移りたいなど。

    この記事では、Unityで1フレーム待つための基本的な方法である「コルーチン」とWaitForEndOfFrameについて解説します。

    コルーチンを使って1フレーム待機する方法

    コルーチンは、Unityで処理を一時停止・再開できる機能です。WaitForEndOfFrameを使うことで、現在のフレームの処理がすべて完了した後に処理を再開できます。

    using UnityEngine;
    using System.Collections;
    
    public class SampleScript : MonoBehaviour
    {
        void Start()
        {
            StartCoroutine(MyCoroutine());
        }
    
        IEnumerator MyCoroutine()
        {
            Debug.Log("処理A");
    
            // 1フレーム待つ
            yield return new WaitForEndOfFrame();
    
            Debug.Log("処理B");
        }
    }
    

    上記のコードでは、Startメソッドで MyCoroutineを開始します。MyCoroutine内では、まず "処理A" がログに出力され、yield return new WaitForEndOfFrame(); で1フレーム待機します。その後、"処理B" がログに出力されます。

    yield return nullとの違い

    yield return null を使用すると、次のフレーム更新の直前まで処理が一時停止されます。一方、 yield return new WaitForEndOfFrame()は、そのフレーム内のすべてのレンダリング処理と画面への描画が 完了した後まで処理を一時停止します。

    処理が再開されるタイミングを分かりやすくまとめると
    ・yield return new WaitForEndOfFrame() : すべてのレンダリング処理が完了した後
    ・yield return null : 次のフレームのUpdate()が開始される前