本記事では『コルーチン』の使い方について簡単に解説していきます。
コルーチンとは
コルーチンとは処理を一時的に中断させることができるunity機能のことです。
初めは”「時間経過」や「特定の条件」を指定し、それらが満たされたら処理を再開させる”といった捉え方をすれば良いかと思います。
【使用例】
・敵キャラが攻撃モーションに入っている間、攻撃エフェクトが終わるまでそれ以外の行動をさせない
・キャラ同士の会話が終わるまで動けないようにする
コルーチンで〇秒間次の処理まで中断させる
まずはシンプルに任意の時間を処理を待機させる方法を解説します。
下は「1フレームと5秒間処理を待機させる」コードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void Test() { // コルーチンを呼び出す StartCoroutine("Target"); } IEnumerator Target() { // 1フレーム待機させる yield return null; Debug.Log("1フレーム間待機しました"); // 5秒間処理を待機させる yield return new WaitForSeconds(5); Debug.Log("5秒が経ちました"); } |
簡単に上のコードの解説をしていきます。
4行目:StartCoroutine(“実行したいメソッド名”);
コルーチンを実行する。
※実行したいメソッドを”文字列”で記述する。
7行目:IEnumerator Test()
コルーチンの処理は『IEnumerator』のデータ型で書く。
※戻り値(yield return)を指定しないと「 値を返さないコード パスがあります」というエラーが生じる。
10行目:yield return null;
戻り値に「null」を指定すると処理を1フレーム待機させることができる。
14行目:yield return new WaitForSeconds(5);
戻り値に「new WaitForSeconds(秒数)」を指定すると、その秒数分を処理を待機させることができる。
コルーチンで条件を満たすまで処理を待機させる
次に下のコードは「Spaceキーを押すまで処理を中断する」という内容になっています。
1 2 3 4 5 6 7 8 9 10 11 |
void Test() { StartCoroutine("Target"); } IEnumerator Target() { Debug.Log("Spaceキーを押したら処理を再開する"); yield return new WaitUntil(() => Input.GetKeyDown(KeyCode.Space)); Debug.Log("Spaceキーが押されました"); } |
9行目:yield return new WaitUntil(() => 条件);
指定した条件がTrueになるまでコルーチンの実行を中断する。
※「WaitUntil」はYield ステートメントでのみ使用できる。
スポンサーリンク