レースゲームで、スタートと同時に時間カウントアップの計測を開始させる方法について
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にすることで、カウントアップを開始します。
実装方法はともかく、思った通りに動いてくれるので結果としては満足しています。