【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回実行してしまうので注意
//例1
StartCoroutine("Defeat");
//例2
StartCoroutine(Defeat());
}
}
これで実行することができます。
まとめ
数秒待機してから処理を行いたいのならコルーチンが最適。
コルーチンを定義する | IEnumerator コルーチン名(){} |
コルーチン内で数秒待機させる | yield return new WaitForSeconds(秒数); |
コルーチンを開始する | StartCoroutine(“コルーチン名”); StartCoroutine(コルーチン名()); |
-
前の記事
【Unity】端末の性能差によってスピードが変わる問題。スマホやPCでも同速度にする方法 2021.08.21
-
次の記事
【無料アセット】目的の位置に決めた秒数で到達させたいアニメーションに超便利なDOTweenの使い方! 2021.08.26