ゲームクリアすれば止まる、タイムアタックのしくみを作り、ベストタイムを表示させてみましょう。
PlayerPrefsでベストタイムの変数をデータ保存し、スタートのたびにテキストで表示します。
今回は、短い時間でクリアすることが、最高タイムとなるように作成します。
関連記事:
点数をテキスト表示
ハイスコアをつくる
ハイスコアをリセットする
タイムアタックできる「カウントアップタイマー」
ベストタイム(最短時間)の更新とリセット
タイマーによる成績で評価ランク
TextMeshProを使用したタイムアップのしくみ
クリックするたびにタイマー作動
キー押下から押下までの秒数をはかる
オブジェクトの準備
まずは必要なオブジェクトを準備しましょう。
平面、Cube、Sphereを作成。
それぞれに色を付けて、CubeとSphereは地上に出るように、座標を変えました。
カメラの位置も変更し、ゲームビューではこのように見えています。
Cubeにリジッドボディを追加します。
Sphereのトリガーにするにチェックを入れます。
続いて、テキストを2つ用意します。
TimerText、BestTimeTextという名前にしました。
TimerTextを中央下に、BestTimeTextを右上に配置しました。
シーンを再ロードしても最高タイムを保持する
ベストタイムが出たときに更新できるスクリプトを作りましょう。
CubeMove.csを作成し、Cubeに追加します。
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CubeMove : MonoBehaviour { public float speed; private Rigidbody rb; public float time; public float bestTime; public Text TimerText; public Text BestTimeText; private bool isClear; void Start() { rb = GetComponent<Rigidbody>(); time = 0.0f; speed = 0.1f; isClear = false; bestTime = PlayerPrefs.GetFloat("TIMER", 100); } void Update() { if (!isClear) { time += Time.deltaTime; TimerText.text = time.ToString("F2"); } if(bestTime < 100) { BestTimeText.text = "ベストタイム " + bestTime.ToString("F2"); } else { BestTimeText.text = "ベストタイム "; } if (Input.GetKey(KeyCode.UpArrow)) { transform.Translate(0f, 0f, speed); } if (Input.GetKey(KeyCode.DownArrow)) { transform.Translate(0f, 0f, speed * -1); } if (Input.GetKey(KeyCode.LeftArrow)) { transform.Translate(speed * -1, 0f, 0f); } if (Input.GetKey(KeyCode.RightArrow)) { transform.Translate(speed, 0f, 0f); } } private void OnTriggerEnter(Collider other){ if (other.gameObject.name == "Sphere" ) { isClear = true; other.gameObject.SetActive(false); Judgement(); } } void Judgement() { if(bestTime > time ) { bestTime = time; PlayerPrefs.SetFloat("TIMER", bestTime); PlayerPrefs.Save(); } } } |
テキストを扱うので、using UnityEngine.UI; を忘れずに書きましょう。
Cubeを選択し、それぞれのフィールドに、Textオブジェクトを入れましょう。
ゲームプレイして、少し時間をかけて、Sphereにぶつけます。
ベストタイムに表示されます。
もう一度プレイして、ベストタイムを下回る時間で、Sphereにぶつけましょう。
ベストタイムが更新されます。
再度、プレイしてみましょう。
シーンが再ロードされても、前回のベストタイムが保持され、ゲーム画面に表示されます。
関連記事:
点数をテキスト表示
ハイスコアをつくる
ハイスコアをリセットする
タイムアタックできる「カウントアップタイマー」
ベストタイム(最短時間)の更新とリセット
タイマーによる成績で評価ランク
TextMeshProを使用したタイムアップのしくみ
クリックするたびにタイマー作動
キー押下から押下までの秒数をはかる