明けましておめでとうございます!本年はちゃんとゲームを公開できるよう頑張ります!
Unityの入門書で通称”ヒヨコ本”として親しまれている”Unity5入門 最新開発環境による簡単3D&2Dゲーム制作
前回は”ゲームオーバー画面を表示する“手順を行いました。今回はゲームオーバー画面でリトライボタンをクリックしてゲームをリセットするようにしたいと思います。
まずは、リトライボタンをクリックしたらゲームオーバー画面を非表示にする設定を行います。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PanelGameOver : MonoBehaviour { // リトライボタンを格納する変数 public GameObject panelGameOver; // ボタンをクリックした時に実行する処理 public void StartScene() { // ゲームオーバー画面を非表示にする panelGameOver.SetActive(false); } }
左側のフィールドに[Hierarchy]ウィンドウ > Canvas をドラッグして割り当てます。
On Click () パネル右側の[No Function] > ButtonRetry > StarScene () を選択します。
設定ができたので動作確認してみます。リトライボタンをクリックするとゲームオーバー画面が非表示になり…ません。
よく考えたらゲームオーバー画面表示の条件となっている変数の値がそのままなのでゲームオーバー画面の非表示、表示の処理がループしているようです。
リトライボタンをクリックしたらゲームオーバー画面表示の条件となっている変数の値を初期化する処理を追加しましょう。
スクリプト”Manager”をダブルクリックしてエディターを起動。下記のコードのマーカー部分が修正箇所になります。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Manager : MonoBehaviour { // スクリプト間で受け渡し用に使用する変数 // ボール残数管理用の変数 public static int ballCount; // スコア管理用の変数 public static int score; // シーンにボールが存在するかチェックする変数 public static bool ballExist; // ゲームタイトル画面が表示されているかチェックする変数 public static bool gameTitle; // ゲームオーバー画面が表示されているかチェックする変数 public static bool gameOver; // ゲーム初期値設定用の変数 // ボール残数の初期設定値を設定する変数 public int initialBallCount; // スコアの初期値を設定する変数 public int initialScore; // ゲームの初期化 void Start() { // [Inspector]ウィンドウのコンポーネントパネルで設定した // 初期値"initialBallCount"の値を受け渡し用変数(static)に代入 ballCount = initialBallCount; // [Inspector]ウィンドウのコンポーネントパネルで設定した //初期値"initialScore"の値を受け渡し用変数(static)に代入 score = initialScore; // 変数の初期値入力 ballExist = false; gameTitle = true; gameOver = false; } // リトライボタンをクリックした時に変数の値を初期化する処理 public void Initialize() { ballCount = initialBallCount; score = initialScore; ballExist = false; gameOver = false; } }
スクリプト”Manager”に追加した処理をリトライボタンで実行します。
[Hierarchy]ウィンドウ > Canvas > Panel GameOver > Button Retry を選択。[Inspector]ウィンドウ > Button (Script) > On Click () パネル右側の[+]をクリック。
左側のフィールドに[Hierarchy]ウィンドウ > Manager をドラッグして割り当てます。
On Click () パネル右側の[No Function] > Manager > Initialize () を選択します。
ここまでの内容をWebGLでビルドしてみました。ゲームオーバー画面でリトライボタンをクリックするとゲームオーバー画面が非表示になり、ゲームがリセットできました。