Unityでゲーム開発をしていると、「1フレームだけ処理を待ってから次の処理を実行したい」という場面がよくあります。
例えば、
オブジェクトが生成された直後に、そのオブジェクトに対して処理を行いたい。
アニメーションの再生が完了してから、次の処理に移りたいなど。
この記事では、Unityで1フレーム待つための基本的な方法である「コルーチン」とWaitForEndOfFrameについて解説します。
コルーチンは、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 new WaitForEndOfFrame()は、そのフレーム内のすべてのレンダリング処理と画面への描画が 完了した後まで処理を一時停止します。
処理が再開されるタイミングを分かりやすくまとめると
・yield return new WaitForEndOfFrame() : すべてのレンダリング処理が完了した後
・yield return null : 次のフレームのUpdate()が開始される前