今回は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");
}
}
