【Unity】時間経過とともに処理を実行しよう!3種類の方法を紹介します!

Unity Unity

時間経過とともに処理を実行しよう!

ゲーム制作をする際に、時間経過によって処理を実行したい場合が多々あります。

今回は、Invoke、Time.deltaTime、 StartCoroutineの3種類の方法を解説します。

それぞれ、別の利点があるのでうまく使い分けができるようにしましょう!

 

Invokeを使って時間計測をしてみよう!

Invokeとは?

Start関数にInvokeを書いて関数を当てはめるだけなので、簡単に扱うことができます。一度しか処理を実行しない場合に向いています。

スクリプトの作成

Invokeを使って3秒後にイベントが発生する関数を書いていきます。

Assets→Create→C#Script

Add-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を作成します。

Add-GameObject

GameObjectのインスペクターに、TimeCounterスクリプトをドラックアンドドロップして追加します。

Add-TimeCounter

これで準備は整いました。

実行してみてください。

second

3秒経過するとデバックログに3秒経過しました!と表示されます。

 

Time.deltaTimeを使って時間計測しよう!

Time.deltaTimeとは?

Update関数を使うので、フレームごとに処理されるのでフレームごとに実行できる。繰り返し同じ処理をした場合に向いています。

スクリプトの作成

TimerCounterスクリプトをTime.deltaTimeを使うために変更しましょう!

TimeCounterスクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TimeCounter : MonoBehaviour
{
float second;//時間計測をするための変数
void Start()
{

}

void Update()
{
second += Time.deltaTime;//時間をカウント
if (second >= 1)//もし1秒たったら
{
//一秒経過するとカウントした時間をリセット
second = 0;
//ログに、1秒経過しました!と表示させる
Debug.Log("1秒経過しました!");
}
}
}

GameObjectにスクリプトを追加

Assetsフォルダにスクリプトがあるだけではスクリプトを使うことができないので、先ほどと同様に、GameObjectにスクリプトを追加しましょう!

Add-TimeCounter

これで準備は整いました。

実行してみてください。

second

1秒ごとに1秒経過しました!とデバックログに表示されます。

StartCoroutineを使って時間計測をしよう!

StartCoroutineとは?

処理を順序だてて処理を実行することができとても便利です。例えば、1秒たったら攻撃してください。攻撃後2秒たったら、走ってください。など順序だてて処理を実行することができます。

スクリプトの作成

TimerCounterスクリプトをStartCoroutineを使うために変更しましょう!

TimeCounterスクリプト

using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;

public class TimeCounter : MonoBehaviour
{
void Start()
{
StartCoroutine(Timer());
}

IEnumerator Timer()
{
Debug.Log("スタート");
yield return new WaitForSeconds(2f);//2秒まつ
Debug.Log("2秒経過しました!");
yield return new WaitForSeconds(3f);//yield return new WaitForSeconds(2f);が終わってから3秒まつ
Debug.Log("さらに3秒経過しました!");
}
}

GameObjectにスクリプトを追加

Assetsフォルダにスクリプトがあるだけではスクリプトを使うことができないので、先ほどと同様に、GameObjectにスクリプトを追加しましょう!

Add-TimeCounter

これで準備は整いました。

実行してみてください。

second

開始時にスタートと表示され、2秒後に2秒経過しました!さらに3秒経過すると、さらに3秒経過しました!と表示されます。

まとめ

今回は時間経過によって処理を実行する方法を3種類解説しました。

オススメの使い方
Invoke 一度のみ処理を実行する場合
Time.deltaTime 繰り返し処理を実行する場合
StartCoroutine 順序だてて処理を実行する場合

それぞれこのように使い分けるとよいでしょう!

コメント

タイトルとURLをコピーしました