今回はUnityのC#スクリプトで利用することの多い「Time.deltaTime」の基本を確認してみます。
はじめに
Unityでタイマーを実装したり、物を移動したりするときに利用する「Time.deltaTime」について、実際の例を見ながら確認していきます。
公式リファレンスは下記です。
簡単な例
以前作成した簡単なストップウォッチで確認してみます。
まずは適当にUIを作成します。
スクリプトは下記です。経過した時間を画面に表示しているだけです。左クリックでスタート、右クリックでストップです。
using UnityEngine; using UnityEngine.UI; public class TimeManager : MonoBehaviour { [SerializeField] private Text _timerText; private float TimerCount; private bool isTimer; void Awake() { TimerCount = 0; isTimer = false; } void Update() { if (Input.GetMouseButtonDown(0)) isTimer = true; if (Input.GetMouseButtonDown(1)) isTimer = false; if (isTimer) TimerCount += Time.deltaTime; _timerText.text = TimerCount.ToString("f3"); } }
パラメータをセットします。
実行して下記のように動けばOKです。
「Time.deltaTime」を加算したものを画面に表示しています。「Time.deltaTime」には経過時間(最終フレームから現在のフレームまでの間隔)が入っています。
他のスクリプト例
「Time.deltaTime」はUpdate内で下記のような使われ方をします。
transform.position = transform.position + velocity * Time.deltaTime; rb.MovePosition(transform.position + velocity * Time.deltaTime);
transform.positionは位置(距離)になります。velocityには速度が入っているので、経過時間をかけると距離になります。(距離=速さ×時間)
ここで、「Time.deltaTime」を掛けないと経過時間が常に1秒として処理してしまう。というわけですね。