こんにちは!Unityの入門書で通称”ヒヨコ本”として親しまれている”Unity5入門 最新開発環境による簡単3D&2Dゲーム制作
前回の記事”ゲームオーバー画面をつくる“ではゲームオーバー画面を完成するところまで進みました。今回はゲームの設定を管理するスクリプトを作って、ゲームオーバー画面の表示制御を行ってみたいと思います。
ゲームオーバー画面を表示させるためのスクリプトを作成します。
[Hierarchy]ウィンドウ > Canvasを選択。[Inspector]ウィンドウ > [Add Component]ボタン > New Script を選択。
下記の通りに設定。
Name: GameOver / Language: C Sharp
[Create and Add]ボタンをクリック。
ゲームオーバーの条件はゲーム管理スクリプト”Manager”の変数”ballCount”の値を使用します。
作成したスクリプト”GameOver”をダブルクリックしてエディターを起動。入力するコードは次の通りです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameOver : MonoBehaviour { // ゲームオーバー画面を格納する変数 public GameObject panelGameOver; // ゲーム中の繰り返し処理 void Update() { // ボールの残数がゼロであれば //(スクリプト"Manager"の変数"ballCount"の値を参照) if (Manager.ballCount == 0) { //ゲームオーバー画面を表示にする panelGameOver.SetActive(true); // ゲームオーバー画面を表示 //(スクリプト"Manager"の変数"gameOver"の値を変更) Manager.gameOver = true; } } }
動作確認をしてみます。
まず[Hierarchy]ウィンドウ > Managerを選択。[Inspector]ウインドウ > Manager (Script) > Initial Ball Count フィールドの値を”2″に設定しておきます。
それから[Hierarchy]ウィンドウ > Canvas > Panel GameOver を選択。[Inspector]ウィンドウのオブジェクト名左側のチェックボックスを外して無効にしておきます。
それでは再生ボタンをクリックして動作を確認してみましょう。
最初のボールが床に接触して消えてもう一度マウスクリックするとすぐにゲームオーバー画面が表示されてしまいます!これはいけない…ということで修正しましょう。
現在のゲームオーバー画面が表示される条件”Manager.ballCount == 0″、ボール残数が”0″になると同時にゲームオーバー画面が表示されてしまいます。
最後のボールがシーンに存在する間はゲームが表示されないように条件を追加します。
ゲームオーバー画面が表示される条件は追加する条件とあわせて次の2つになります。
作成したスクリプト”GameOver”をダブルクリックしてエディターを起動。入力するコードは次の通り。マーカー行が修正した部分になります。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameOver : MonoBehaviour { // ゲームオーバー画面を格納する変数 public GameObject panelGameOver; // ゲーム中の繰り返し処理 void Update() { // ボールの残数がゼロであれば //(スクリプト"Manager"の変数"ballCount"の値を参照) if (Manager.ballCount == 0 // さらにシーンにボールが存在しなければ //(スクリプト"Manager"の変数"ballExist"の値を参照) && !Manager.ballExist) { //ゲームオーバー画面を表示にする panelGameOver.SetActive(true); // ゲームオーバー画面を表示 //(スクリプト"Manager"の変数"gameOver"の値を変更) Manager.gameOver = true; } } }
ボール残数が”0″の状態でボールが床に接触したらゲームオーバー画面が表示されるようになりました。
しかしゲームオーバー画面が表示されている状態でもゲームは実行されているのでマウスをクリックするとボール残数表示が変化してマイナス表示になってしまいます…修正しましょう。
ボールの発生条件を追加してゲームオーバー画面が表示されている間はボールを発生できないようにします。
スクリプト”Spawner”をダブルクリックしてエディターを起動。入力するコードは次の通りです。マーカー行が修正した部分になります。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Spawner : MonoBehaviour { // シーンに発生させるオブジェクトを格納する変数"prefab"を宣言 public GameObject prefab; // ゲーム実行中の繰り返し処理 void Update() { // マウス左クリック(ボタン"Fire1")したとき if (Input.GetButtonDown("Fire1") // シーンにボールが存在しなければ // (スクリプト"Manager"の変数"ballExist"の値を参照) && !Manager.ballExist // ゲームオーバー画面が表示されていなければ // (スクリプト"Manager"の変数"gameOve"の値を参照) && !Manager.gameOver ) { // 変数"prefab"に格納されたプレハブをシーンに発生させる Instantiate(prefab, transform.position, transform.rotation); // シーンにボールが存在するかチェックする変数を"true"にする // (スクリプト"Manager"の変数"ballExist"の値を変更) Manager.ballExist = true; // ボールの残数を管理する変数の値を減らす // (スクリプト"Manager"の変数"ballCount"の値を変更) Manager.ballCount--; } } }
ここまでの内容をWebGLでビルドしてみました。ボール残数が”0″の状態でボールが床に接触したらゲームオーバー画面が表示され、マウスクリックしてもボール残数表示がマイナスになりません。
唐突にゲームオーバー画面が表示されるのでちょっと気になりますが、いずれ改良したいと思います。