UIテキストを用いたカウントアップタイマーで、ある条件になればストップする仕組みを作ってみましょう。
今回の制作では、3つのボールを取ったらタイマーを止めるようにしていきます。
ミリ秒単位で、タイムアタックするようなゲームでも、使えそうな仕組みですね。
関連記事:
タイムアップでテキストを表示
ベストタイムを表示する
タイマーによる成績で評価ランク
TextMeshProを使用したタイムアップのしくみ
クリックするたびにタイマー作動
キー押下から押下までの秒数をはかる
制限時間になればButtonを表示
オブジェクトの用意
オブジェクトを用意しましょう。
Cubeをプレーヤー、アイテムとしてSphereを配置します。
わかりやすいように色分けしています。
オブジェクト名はこのようになっています。
Cubeにはリジッドボディを追加しましょう。
ここでは、転がっていかないように、回転を固定しています。
3つのSphereにはそれぞれ、Itemという名前でタグをつけます。
3つのSphereそれぞれ、コライダーの「トリガーにする」にチェックを入れます。
UI > テキストを作成しましょう。
テキスト名をTimeTextに変更しました。
テキストの色、サイズ、配置を変えます。
ここでは、中央下に配置しています。
タイムアタックのスクリプト
条件がそろえばタイマーを止めるには、スクリプトが必要です。
Cubeに、PlayerMove.csを作成しましょう。
PlayerMove.csのスクリプトを書いていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class PlayerMove : MonoBehaviour { public float speed = 10.0f; private Rigidbody rb; private int count; public float time; public Text TimeText; void Start() { rb = GetComponent<Rigidbody>(); count = 0; time = 0.0f; } void Update() { var moveX = Input.GetAxis("Horizontal") * speed; var moveZ = Input.GetAxis("Vertical") * speed; rb.AddForce(moveX, 0.5f, moveZ); //3個のアイテムを取れていない間は実行 if (count < 3) { time += Time.deltaTime; TimeText.text = time.ToString("F2"); } } void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("Item")) { other.gameObject.SetActive(false); count++; } } } |
UIテキストを扱う場合、using UnityEngine.UI; を忘れずに書いておきましょう。
TimeTextフィールドには、TimeTextを入れます。
「F2」を使えば、少数点2位までテキストに表示可能。
アイテムが3個取れていない間は、ずっとタイマーをカウントアップさせています。
ゲームプレイしてみましょう。
3つのアイテムを取れば、タイマーのカウントがストップします。
関連記事:
タイムアップでテキストを表示
ベストタイムを表示する
タイマーによる成績で評価ランク
TextMeshProを使用したタイムアップのしくみ
クリックするたびにタイマー作動
キー押下から押下までの秒数をはかる
制限時間になればButtonを表示