今回はUnityで簡単なストップウォッチを作成してみます。
はじめに
Unityのバージョンは2021.3.3f1です。
Unityの時間について理解を深めるために、2Dで簡単なストップウォッチを作成してみます。画面にタイマーを表示、左クリックでスタート、右クリックでストップする簡単なものです。
作成開始
まずは時間を表示するテキストとして、「UI」→「Legacy」→「Text」を追加。
サイズやフォントは好きなものでOK。
次に、「CreateEmpty」で空オブジェクトを追加、TimeManagerと言う名前に変更します。
下記のスクリプトを作成。
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; } private void FixedUpdate() { if (isTimer) TimerCount += Time.deltaTime; _timerText.text = TimerCount.ToString("f3"); } }
入力系(マウスクリック)はUpdate内で実装、時間のカウントはFixedUpdateで実装してみます。
このスクリプトをアタッチして、パラメータをセット。
実行すると、下記の様な感じになります。0.02ずつ増えていて、ストップウォッチとはちょっと違うかなと言う感じです。
公式リファレンスを確認すると、FixedUpdate内ではTime.deltaTimeはTime.fixedDeltaTimeが返されるという事。なるほど。
FixedUpdateを削除して、Updateを下記の様に変更するといい感じに動作します。
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"); } }