時間経過とともに処理を実行しよう!
ゲーム制作をする際に、時間経過によって処理を実行したい場合が多々あります。
今回は、Invoke、Time.deltaTime、 StartCoroutineの3種類の方法を解説します。
それぞれ、別の利点があるのでうまく使い分けができるようにしましょう!
Invokeを使って時間計測をしてみよう!
Invokeとは?
Start関数にInvokeを書いて関数を当てはめるだけなので、簡単に扱うことができます。一度しか処理を実行しない場合に向いています。
スクリプトの作成
Invokeを使って3秒後にイベントが発生する関数を書いていきます。
Assets→Create→C#Script
今回のスクリプトは時間を計測するスクリプトなので、スクリプト名はTimeCounterとします。
TimeCounterスクリプト
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TimeCounter : MonoBehaviour { void Start() { //Invokeの使い方 //Invoke("関数名",経過時間); //注意点として、Invokeは引数のある関数は使えない Invoke("Timer", 3); } void Timer()//Invokeで使う関数を作成 { Debug.Log("3秒経過しました!");//3秒後にデバックログに表示 } } |
これで時間経過によってイベントが発生するスクリプトの完成です。
GameObjectにスクリプトを追加
Assetsフォルダにスクリプトがあるだけではスクリプトを使うことができないので、Hierarchyにスクリプトを使うためのオブジェクトを用意します。
Hierarchy→Create Emptyで空のGameObjectを作成します。
GameObjectのインスペクターに、TimeCounterスクリプトをドラックアンドドロップして追加します。
これで準備は整いました。
実行してみてください。
3秒経過するとデバックログに3秒経過しました!と表示されます。
Time.deltaTimeを使って時間計測しよう!
Time.deltaTimeとは?
Update関数を使うので、フレームごとに処理されるのでフレームごとに実行できる。繰り返し同じ処理をした場合に向いています。
スクリプトの作成
TimerCounterスクリプトをTime.deltaTimeを使うために変更しましょう!
TimeCounterスクリプト
|
GameObjectにスクリプトを追加
Assetsフォルダにスクリプトがあるだけではスクリプトを使うことができないので、先ほどと同様に、GameObjectにスクリプトを追加しましょう!
これで準備は整いました。
実行してみてください。
1秒ごとに1秒経過しました!とデバックログに表示されます。
StartCoroutineを使って時間計測をしよう!
StartCoroutineとは?
処理を順序だてて処理を実行することができとても便利です。例えば、1秒たったら攻撃してください。攻撃後2秒たったら、走ってください。など順序だてて処理を実行することができます。
スクリプトの作成
TimerCounterスクリプトをStartCoroutineを使うために変更しましょう!
TimeCounterスクリプト
|
GameObjectにスクリプトを追加
Assetsフォルダにスクリプトがあるだけではスクリプトを使うことができないので、先ほどと同様に、GameObjectにスクリプトを追加しましょう!
これで準備は整いました。
実行してみてください。
開始時にスタートと表示され、2秒後に2秒経過しました!さらに3秒経過すると、さらに3秒経過しました!と表示されます。
まとめ
今回は時間経過によって処理を実行する方法を3種類解説しました。
オススメの使い方 | |
Invoke | 一度のみ処理を実行する場合 |
Time.deltaTime | 繰り返し処理を実行する場合 |
StartCoroutine | 順序だてて処理を実行する場合 |
それぞれこのように使い分けるとよいでしょう!
コメント