Unity|簡単なストップウォッチを作成してみた

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

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