【Unity】時間を指定して、その後関数を呼び出す

第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]

最後に

初め「コルーチン」についてよくわかっていなかったのですが、いろいろ試してどんなものなのか体感出来ました。 これは非常に便利な関数なので忘れずに利用をしていきたいです。