こんにちは、マサです。
前回、スコアを表示させてスコアが1500になるとGameClearメソットが実行されて、ゲームが再度始まるところまで作れました。
今回は制限時間を60秒にして60秒以内でスコアが1500に到達したら、GameClearメソットを実行させて、60秒以上かかる場合はGameOverメソッドを実行させる処理を追加します。
Scene内にTimeTextを表示させる
下記の画像1のようにTimeTextを表示させます。
①Canvasを右クリックして、Textを選択
そうすると新しいTextがSceneの中心に表示されると思います。
次に画像2のようにTextを真上に動かしてフォントサイズとカラーを変更します。
②名前をTimeTextに変更
③TimeTextの位置を上に変更
④TimeTextの数値を60に変更
⑤フォントサイズとカラーは好みで変更してください
時間制限のスクリプトを追加する
追加したGameManagementスクリプトを一旦すべて載せます。
後ほど解説するので、どのような処理が書かれているか確認しましょう。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class GameManagement : MonoBehaviour { // スコア関連 public Text scoreText; private int score; public int currentScore; public int clearScore = 1500; // 今回の追加 // タイマー関連 public Text timerText; public float gameTime = 60f; int seconds; // Start is called before the first frame update void Start() { Initialize(); } // Update is called once per frame void Update() { TimeManagement(); } // ゲーム開始前の状態に戻す private void Initialize() { // スコアを0に戻す score = 0; } // 今回の追加 public void TimeManagement() { gameTime -= Time.deltaTime; seconds = (int)gameTime; timerText.text = seconds.ToString(); if (seconds == 0) { Debug.Log("TimeOut"); GameOver(); } } // スコアの追加 public void AddScore() { score += 100; currentScore += score; scoreText.text = "Score: " + currentScore.ToString(); Debug.Log(currentScore); if (currentScore >= clearScore) { GameClear(); //Debug.Log(clearScore); } } // GameOverしたときの処理 public void GameOver() { SceneManager.LoadScene(SceneManager.GetActiveScene().name); } // GameClearした時の処理 public void GameClear() { SceneManager.LoadScene(SceneManager.GetActiveScene().name); } }
タイマー関連の変数を追加
// 今回の追加 // タイマー関連 public Text timerText; public float gameTime = 60f; int seconds;
上記3つの変数を定義しました。
TimeManagementメソットを追加
// 今回の追加 public void TimeManagement() { gameTime -= Time.deltaTime; seconds = (int)gameTime; timerText.text = seconds.ToString(); if (seconds == 0) { Debug.Log("TimeOut"); GameOver(); } }
gameTimeに60を設定しているので、gameTimeが0になった場合、GameOverメソットが呼び出されるという処理を追加しました。
もちろん、TimeManagementメソットは毎秒数える必要があるので、Updateメソットに追加することも忘れないでください。
ここまで、完成したら下記の画像3のようにTimeTextを実際に反映させます。
①GameManagementをクリック
②TimeTextをGameManagementに反映させる
Unity学習者おすすめの本
この本はUnity学習者におすすめです。
内容がとても良くてイラストで重要なポイントは解説されているので、理解しやすいです。
操作する内容は画像付きなので、同じ操作しても同じ動作にならないというようなことはないように工夫されています。
一冊勉強するだけで、大量の知識をインプットできるので、テトリス作成と同時進行で試してみてください。
今回のまとめ
今回はゲーム内に制限時間をつけて、60秒以内にゲームがクリアされなければ、ゲームオーバーになるという設定にしました。
次回は、一時停止ボタンと画面を作成します。
そろそろ、このテトリス作成も最後に近づいています。
少しでもこのブログがためになっていたら嬉しいです。
最後まで読んでいただきありがとうございました。
⭐️あわせて読もう!
→Unityテトリスの作り方-12
コメント