Invokeを使って一定時間後に処理をする

Unityではコルーチンを使うと一定時間毎に何らかの処理を行わせる事が出来ました。

Unityでコルーチンを使うと定期的に何らかの処理を行える事が出来るようになります。一見解り辛いけど使い方がわかれば便利かも!?

似たような処理をInvokeを使うともっと手軽に実現出来ます。

Invokeは指定時間後に指定した関数を実行する事が出来る関数です。

サンプルを作って確認してみましょう。

スポンサーリンク

Invokeで実行する関数InstantiateGameObjectを作成する

まずはInvokeで指定して実行する関数を作成します。

InstantiateGameObject関数を作成します。

InstantiateGameObject関数はインスペクタで設定したゲームオブジェクトをインスタンス化する関数です。

Random.insideUnitSphereは半径1の球体の内部のランダムな点を返します。

その為Vector3のX、Y、Zの値を-1から1の間で得られる事が出来ます。

Random.rotationはQuaternion値をランダムで得られます。

Random.rotationの代わりにRandom.rotationUniformを使っても同じです。

インスタンス化した後、Destroy関数を使用して10秒たったら消しています。

InvokeでInstantiateGameObjectを指定する

実行する関数が出来たのでInvokeを使って実行してみましょう。

Start関数内でInvokeの第1引数に関数名を指定し、第2引数に何秒後に実行するかを指定します。

今回の場合はこのスクリプトを設定したゲームオブジェクトが登場してから5秒後にInstantiateGameObject関数を実行します。

一定時間毎に実行するInvokeRepeatingを使う

さきほど紹介したInvokeで指定時間後に関数を実行する事が出来ましたが繰り返し処理を行う事は出来ませんでした。

しかし、指定時間後に関数を実行した後、定期的にその処理を続けたい事もあります。

そんな時はInvokeRepeating関数を使用します。

↑の例では5秒後にInstantiateGameObject関数を実行した後、2秒毎にずっとInstantiateGameObject関数を実行するようになります。

これで定期的に処理をする事が出来るようになりましたが、開始したら停止する術も必要です。

CancelInvoke関数を使うと実行しているInvokeを停止する事が出来ます。

↑の例ではマウスの左ボタンを押したら普通にInstantiateGameObject関数を呼び出し、マウスの右ボタンを押したらInvokeを停止します。

InvokeやInvokeRepeating、CancelInvokeは定義されているクラス名を省略してそのまま関数名(メソッド名)で使用出来ていますが、

これはそれらがMonoBehaviourクラスで定義されていてJavaScriptの場合はデフォルトでMonoBehaviourを継承して作成されているからです。

Invokeのサンプルを実行して確認する

Invokeのサンプルが作成出来たので、Main Cameraに作成したスクリプトを取りつけインスペクタでインスタンス化するゲームオブジェクトを設定し実行します。

↑のように最初InvokeとInvokeRepeatingが実行され5秒後にInstantiateGameObjectが実行されるのでゲームオブジェクトが2つ表示されます。

その後2秒間隔でInvokeRepeatingで指定したInstantiateGameObjectが実行されていきます。

マウスの右ボタンを押してCancelInvokeをするとInvokeRepeatingの実行が停止されます。

コルーチンとInvokeの使い分け

Invokeを使えばコルーチンを使うよりもわかりやすく簡単に定期的な処理を実行する事が出来ます。

ですがInvokeでは一時停止したあと再開させたりといった処理が出来ません。

関数名指定の所で引数を指定出来なかったり、戻り値もないので使いどころとしては指定時間後に何らかの処理をしたい時や単純な繰り返し処理をさせたい時に使うといいかもしれません。

コルーチンの場合は一時停止や再開といった柔軟な繰り返し処理が出来ます。

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます