【Unity】処理を止める方法。一定時間待ってから処理を実行するスクリプト

【Unity】処理を止める方法。一定時間待ってから処理を実行するスクリプト

 Unityの一部の処理を一旦停止させたり、特定の処理だけを先に実行する方法について詳しく解説していきます。コルーチンを使うのですが、難しいことは考えなくて大丈夫です。とりあえずコピペで実装できるようにまとめてみました。この記事でスクリプトの停止・再開・実行順番はマスターできます。

コルーチンとは?

 コルーチンとはスクリプト全体の処理を動かしながら特定の処理を一定時間止めることができる関数のことです。

 例えば、敵が倒れるアニメーションが終わってから敵のオブジェクトを破壊する処理を作るとします。この時、処理を順番にスクリプトに書くとアニメーションが終わる前に敵のオブジェクトを破壊してしまいます。

 そこで、アニメーションが終わるまで コルーチン を使って一時停止することができます。この時、全体のスクリプトが止まるわけではないので、プレイヤーは移動したりできるわけですね。

コルーチンを使う最大のメリット

 それは、ゲーム内処理の最適化を行えることです。

 1秒待ってから処理を行いたい時ってありますよね。

 そんな時に毎回秒数を加算するfloat型の変数を用意して加算し続け、1秒に達した時に処理を行ってから変数を初期化するなんていちいちコードを書いていては手間ですし処理が最適化されません

 どうしても変数で待機させたい場面があるのなら、加算方法に気を付けましょう。端末の性能によってフレームレートが変わるので注意です。詳しくはこちらの記事で。

【Unity】端末の性能差によってスピードが変わる問題。スマホやPCでも同速度にする方法

 コルーチンという聞きなれない言葉で苦手意識を持ちがちですが、とりあえずコピペで使えるように記載したので使ってみてください。

 シンプルに1秒待ってから処理を行ってくれるので非常に便利ですよ。

コルーチンの使用方法

コルーチンを定義する

  コルーチン名をDefeatとします。defeatの意味は敵を倒したという意味ですね。ここはどんな名前でもいいので好きな名前を付けましょう。

IEnumerator Defeat() 
{
    //終わるまで待ってほしい処理を書く

    //例:敵が倒れるアニメーションを開始

    //2秒待つ
    yield return new WaitForSeconds(2);

    //再開してから実行したい処理を書く
    //例:敵オブジェクトを破壊
} 

 見慣れないコードが2つ出てきましたね。

 大まかにですが、『 IEnumerator コルーチン 名(){}』で コルーチン を定義し、『 yield return new WaitForSeconds(秒数) 』で指定の秒数だけ待機させることができます。

コルーチン を実行する

 コルーチン を開始するためには『StartCoroutine(” コルーチン 名”);』か『 StartCoroutine(コルーチン名()); 』と書く必要があります。どちらでも良いのでお好みでどうぞ。

void Update(){
  //もし敵を倒したのなら
  if(defeat_flag==true){
    //Defeatというコルーチンを開始
    //どちらか一方を書く。2つ書くと2回実行してしまうので注意
    StartCoroutine("Defeat");
    StartCoroutine(Defeat());
  }
}

 これで実行することができます。

まとめ

 数秒待機してから処理を行いたいのならコルーチンが最適。

コルーチンを定義する IEnumerator コルーチン名(){}
コルーチン内で数秒待機させる yield return new WaitForSeconds(秒数);
コルーチンを開始する StartCoroutine(“コルーチン名”);
StartCoroutine(コルーチン名());