第9回目は、時間を指定して設定されたメソッドを呼び出す方法です。
cocos2dxを利用している場合はDelayTimeクラスやCallFuncクラスを使って実装していましたが、Unityではどのようにしたらいいのかを調べました。
前回:【Unity 2D】衝突判定について | albatrus.com
コルーチン
Unityだけではないのですが、「コルーチン」という仕組みがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void Start () { 指定された「コルーチン」を呼び出す StartCoroutine("hogehoge"); } //「コルーチン」で呼び出すメソッド IEnumerator hogehoge(){ Debug.Log("start"); yield return new WaitForSeconds(5); Debug.Log("5秒経ちました"); } |
StartCoroutine
まずは、「コルーチン」で設定された関数(メソッド)を呼び出す時には[StartCoroutine]を利用します。
1 |
StartCoroutine("hogehoge"); |
IEnumerator ※※※()
「コルーチン」に指定する関数には[IEnumerator]を頭に付けます。
1 2 3 4 5 |
IEnumerator hogehoge(){ } |
yield return new WaitForSeconds()
時間を指定する場合には[WaitForSeconds]を利用します。指定された秒数後に、[WaitForSeconds]の下に書いたコードが呼び出されます。
1 2 3 4 5 6 7 |
IEnumerator hogehoge(){ Debug.Log("start"); yield return new WaitForSeconds(5); Debug.Log("5秒経ちました"); } |
コルーチンを途中で止める場合
コルーチン内で条件式などを使って、途中で中断する場合は[StopCorutine]を利用します。また、全てのコルーチンを止める場合は[StopAllCorutine]を使います。
Invoke
「コルーチン」だけではなく、Invoke()を利用すれば同じように時間が指定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void Start () { Debug.Log("start"); //(メソッド,秒数)を指定 Invoke("hogehoge",5); } //「Invoke」で呼び出すメソッド void hogehoge(){ Debug.Log("5秒後"); } |
Updateを利用する
cocos2dxでもよく利用しているのですが、Updateを使ってある時間ごとにメソッドを呼び出す方法もあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
float time = 0.0f; void Update () { time = time + Time.deltaTime; if(time >= 5.0f){ time = 0; Debug.Log("5秒後"); } } |
最後に
初め「コルーチン」についてよくわかっていなかったのですが、いろいろ試してどんなものなのか体感出来ました。これは非常に便利な関数なので忘れずに利用をしていきたいです。
Unityゲーム開発 オンライン3Dアクションゲームの作り方
posted at 2014.9.5
竹内 大五郎,石黒 赳彦,高橋 誠史,香川 寛和,河本 健太郎
SBクリエイティブ
売り上げランキング: 1598
SBクリエイティブ
売り上げランキング: 1598
