転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

レースゲームで、スタートと同時に時間カウントアップの計測を開始させる方法について

unityroomに投稿した以下ゲームですが、車を操作するゲームです。
unityroom.com
車を操作するスクリプト自体はよくあるものなんですが、車をスタートさせると時間カウントアップを開始させるようにしました。
今後のために、メモとして残しておきます。

車の制御について

private void Update() {

    float steerAmount = Input.GetAxis("Horizontal") * steerSpeed * Time.deltaTime;
    float moveAmount = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;

    transform.Rotate(0, 0, -steerAmount);
    transform.Translate(0, moveAmount, 0);

}

steerAmountが曲がる速度、moveAmountが直線の速度です。
こういった移動関連の実装では、Time.deltaTimeを使うことがお約束になっています。

Time.deltaTimeを使う意図として、フレームレートによる動きの差異を減らすためとは分かっているのですが、いつも何となく使っていました。

ちゃんと理解できていなかったので調べてみたら、以下の記事がかなり丁寧にまとめられていました。
qiita.com
nekojara.city

時間カウントアップの開始タイミングについて

時間カウントアップは、以下のように実装しました。
uuc1h.hatenablog.jp
この時間カウントアップを開始するタイミングを、車を操作するためにキーボードの矢印キーを押した瞬間にしたいと思いました。
そこで、さきほどのスクリプトを以下のように変更しました。

private void Awake() {

    timer = FindObjectOfType<TimersComponent>();
    isStart = false;

}

private void Update() {

    if (!timer.countFlg && Input.GetAxis("Vertical") > 0 && !isStart){

        timer.countFlg = true;
        isStart = true;

    }

    float steerAmount = Input.GetAxis("Horizontal") * steerSpeed * Time.deltaTime;
    float moveAmount = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;

    transform.Rotate(0, 0, -steerAmount);
    transform.Translate(0, moveAmount, 0);

}

Updateメソッドにあるif文の制御で、timer.counfFlgをtrueにすることで、カウントアップを開始します。
実装方法はともかく、思った通りに動いてくれるので結果としては満足しています。