はじめに
「コルーチンを使うと◯秒間処理を停止するという動きができる」と聞いてはいましたが、それは実際どうやればできるのか。
そもそもコルーチンってなんですか!という状態からのスタートだったので、とりあえず調べてみました。
そもそもコルーチンとは。
途中で停止したり中断したりできる処理の塊という感じに捉えています。
途中で止められるというのが個人的推しポイントです。
基本の書き方
まずはコルーチンの書き方です。
IEnumerator 関数名()
{
//処理(なくてもOK)
yield return null;
//再開後の処理
}
呼び出すときは、呼び出したいところで
StartCoroutine("関数名");
と書けばOKです。
途中で処理を止めたい場合には
yield break;
と書きます。
コルーチン内で別のコルーチンを呼び出すことも可能です。
処理の中にStartCoroutine("関数名");
を入れてもOKってことです!
ただ処理を止めるだけではなく、◯秒おきに処理を繰り返すということも、コルーチンを使えばできそうですね。
○秒おきに処理を繰り返す方法
IEnumerator Repeat()
{
_count++;
yield return new WaitForSeconds(3); //3秒待って再開する
StartCoroutine("Repeat");
}
変数「_count」が3秒おきに1ずつ増える処理です。
呼ばれたらまず数を増やす
→停止する
→停止時間が終わったらもう一度コルーチンを呼び出す
としました。
今まで似たようなもので、◯秒後に関数を呼び出すことができるInvokeを使っていましたが、まだどちらの方が使いやすいとか、オススメとか、優劣をつけられるほど使いこなせていないので、もう少し色々作ってみたいですね。
開始演出を流している間、プレイヤーの入力を反映しないようにする
コルーチンを使えばこういうこともできますね。
①yield retrun〜の前に、入力判定を受けて動いているスクリプトをenable = false;する
②秒数を指定して時間を止める
③再開後にenable = true;の処理を書いて、入力判定があった時処理を行うようにする
今までInvokeしか知らない状態だと開始演出の作り方がわからなくて困っていましたが、コルーチンでは簡単にできます。
お困りの方はぜひコルーチンを使ってみてください。