第9回目は、時間を指定して設定されたメソッドを呼び出す方法です。 cocos2dxを利用している場合はDelayTimeクラスやCallFuncクラスを使って実装していましたが、Unityではどのようにしたらいいのかを調べました。
前回:【Unity 2D】衝突判定について | albatrus.com
コルーチン
Unityだけではないのですが、「コルーチン」という仕組みがあります。 [c]
void Start () {
指定された「コルーチン」を呼び出す StartCoroutine("hogehoge");
}
//「コルーチン」で呼び出すメソッド
IEnumerator hogehoge(){
Debug.Log("start");
yield return new WaitForSeconds(5);
Debug.Log("5秒経ちました");
}
[/c]
StartCoroutine
まずは、「コルーチン」で設定された関数(メソッド)を呼び出す時には[StartCoroutine]を利用します。 [c]
StartCoroutine("hogehoge");
[/c]
IEnumerator ※※※()
「コルーチン」に指定する関数には[IEnumerator]を頭に付けます。 [c] IEnumerator hogehoge(){
}
[/c]
yield return new WaitForSeconds()
時間を指定する場合には[WaitForSeconds]を利用します。 指定された秒数後に、[WaitForSeconds]の下に書いたコードが呼び出されます。 [c]
IEnumerator hogehoge(){
Debug.Log("start");
yield return new WaitForSeconds(5);
Debug.Log("5秒経ちました");
}
[/c]
コルーチンを途中で止める場合
コルーチン内で条件式などを使って、途中で中断する場合は[StopCorutine]を利用します。 また、全てのコルーチンを止める場合は[StopAllCorutine]を使います。
Invoke
「コルーチン」だけではなく、Invoke()を利用すれば同じように時間が指定できます。 [c] void Start () {
Debug.Log("start");
//(メソッド,秒数)を指定
Invoke("hogehoge",5);
}
//「Invoke」で呼び出すメソッド
void hogehoge(){
Debug.Log("5秒後");
}
[/c]
Updateを利用する
cocos2dxでもよく利用しているのですが、Updateを使ってある時間ごとにメソッドを呼び出す方法もあります。 [c]
float time = 0.0f;
void Update () {
time = time + Time.deltaTime;
if(time >= 5.0f){
time = 0;
Debug.Log("5秒後");
}
}
[/c]
最後に
初め「コルーチン」についてよくわかっていなかったのですが、いろいろ試してどんなものなのか体感出来ました。 これは非常に便利な関数なので忘れずに利用をしていきたいです。