タイマーで生成
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 49/67。
数秒ごとに何かを生成するスポナーにはタイマーが必要です。Time.deltaTimeは前のフレームにかかった時間なので、毎回Update()でフィールドに加算すると、経過した秒数がわかります。合計が間隔に達したら生成し、その合計から間隔を差し引きます。
この噴水は0.5秒ごとに水滴を投げます。
public GameObject dropPrefab;
public float interval = 0.5f;
float timer;
void Update()
{
timer += Time.deltaTime;
if (timer >= interval)
{
Instantiate(dropPrefab, transform.position, Quaternion.identity);
timer -= interval;
}
}timer -= intervalは余りを保持します。フレームが0.51秒で終わった場合、次の0.5秒のカウントは0.01秒から始まり、水滴は一定のリズムを保ちます。timer = 0にするとその余りが失われるため、水滴が少しずつ遅れ、長時間のゲームでは遅延が積み重なります。Inspectorで設定する必要がないため、timerはprivateです。
チャレンジ
中級ドロッパーはinterval秒ごとにボックスを落とします(インスペクターには2と表示されています)。最初のボックスは再生してから2秒後に落ち、その後は2秒ごとにもう1つ落ちます。
- 各ボックスをドロッパーの位置に、回転なしで生成します。
- ボックスを落とすたびに、その番号をログに記録します:
Box 1、Box 2など。
再生を押して積み重なっていく様子を確認し、それからチェックを押してください。
自分で試してみよう
using UnityEngine;
public class BoxDropper : MonoBehaviour
{
public GameObject boxPrefab;
public float interval = 1f;
void Update()
{
// interval 秒ごとにボックスを落とし、"Box 1"、"Box 2"…をログに出力する
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。