Unity - コルーチン(co-routine)
初めに
通常、関数で行なわれるすべてのアクションは 1フレーム内で行われます。そのため、時間経過や関数の処理を一時停止させることは普通の関数には不向きです。そこで、指定時間待った後に後続の処理を続けたり、1フレームごとに処理をさせたりすることができるコルーチンという特別な関数があります。本記事では、コルーチンについてまとめます。
Index
コルーチン(co-routine)
コルーチンとは
コルーチンとは、
コルーチンとは、実行を停止して Unity へ制御を戻し、その次のフレームで停止したところから続行することができる関数
戻り値の型が IEnumerator で、yield return ステートメントを内部に持つことを宣言した関数
のことです。
通常の関数は、1フレームで処理されます。そのため、下のスクリプトのようにアルファ値を 0 にして、フェードさせる処理を通常の関数で行うと、一気にアルファ値が 0 になり、フェードではなく、すぐに透明になります。
void Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = renderer.material.color; c.a = f; renderer.material.color = c; } }
そこで、コルーチンを使うことで一時停止させることができるようになり、フェードの処理ができるようになります。
IEnumerator Fade() //コルーチンでは IEnumerator にする { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = renderer.material.color; c.a = f; renderer.material.color = c; yield return null; //1フレーム待つ処理 } }
コルーチンの呼び出し
コルーチンを呼び出すには、Monobehavior 内にある StartCoroutine 関数を使います。
public class Test : MonoBehaviour //Monobehaviorを継承 { void Start() { StartCoroutine("Fade"); //コルーチンの開始 //StartCoroutine(Fade()); も可 } IEnumerator Fade() //コルーチンでは IEnumerator にする { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = renderer.material.color; c.a = f; renderer.material.color = c; yield return null; //1フレーム待つ処理 } } }
一時停止、終了(yield return、yield break)
機能 | 説明 |
---|---|
yield return null | 1フレーム分処理を停止、次のフレームで続きの行を処理 |
yield break | コルーチンを途中で終了、再開はできない |
yield return new WaitForSeconds(float seconds) | 指定した seconds 秒、コルーチンを中断する |
yield return new WaitUntil(Func predicate) | predicate の関数の返り値が true になったら処理を再開する |
yield return new WaitWhile(Func predicate) | predicate の関数の返り値が false になったら処理を再開する |
yield return StartCoroutine() | 指定したコルーチンを実行、完了するまで後続処理 |
yield return new WaitForEndOfFrame() | スクリーン上のレンダリングが完了するまで待つ |
yield return new WaitForFixedUpdate() | FixedUpdate 関数が呼び出されるまで待つ |
yield return new WaitForSecondsRealtime(float seconds) | スケール化されていない時間を使用して、指定した秒数の間コルーチンの実行を一時停止させる |
コルーチンの終了
コルーチンを停止させるには、StopCoroutine または StopAllCoroutines を使います。
StopCoroutine:この Behaviour 上で実行されている methodName という名のコルーチン、または routine として保持されているコルーチンをすべて停止する
public void StopCoroutine (string methodName);
public void StopCoroutine (IEnumerator routine);
public void StopCoroutine (Coroutine routine);
StopAllCoroutines:Behaviour 上で実行されているコルーチンをすべて停止する
public void StopAllCoroutines ();
最後に
- コルーチンとは、実行を停止して Unity へ制御を戻し、その次のフレームで停止したところから続行することができる関数
- 戻り値の型が IEnumerator で、yield return ステートメントを内部に持つ
- コルーチンを呼び出すには、Monobehavior 内にある StartCoroutine 関数を使う
- コルーチンを停止させるには、StopCoroutine または StopAllCoroutines を使う