3-4ゲームオーバー画面を作る【Unityゲーム開発の基礎】作って学ぶブロック崩し
ブロック崩しを作りながらUnityを学んでいこう!
フェーズ1で「ブロック崩しの骨格」を作り、
フェーズ2ではその「見た目をかっこよくする」ことができました。
フェーズ3の目標は「タイトルやゲームオーバー・ゲームクリアの画面を作る」です。これらを追加することでかなりゲームっぽい雰囲気になるのではないでしょうか。
前回は敵をすべて倒したらゲームクリア画面が出るようにしました。
今回はボールを拾えなかったらゲームオーバー画面を出す仕組みを作っていきます。
ゲームオーバー画面を作る
画面はタイトル画面とだいたい同じなので複製して作ります。
GameTitle オブジェクトを Ctrl + C でコピーしてから Ctrl + V でペーストして複製します。オブジェクトの名前を「GameOver」として、デザインを調整します。
ボタンを2つにしてコンティニューする場合とタイトルに戻る場合を選べるようにしてみます。
ゲームクリア画面をMainManagerに関連付け
MainManagerBehaviourにGameOver用のメンバ変数を追加します。
public class MainManagerBehaviour : MonoBehaviour
{
public UICanvasBehaviour gameTitle;
public UICanvasBehaviour gameClear;
public UICanvasBehaviour gameOver; //←ココを追加
public PlayerBehaviour player;
public BallBehaviour ball;
public EnemyUnitBehaviour enemyUnit;
:
}
HierarchyウィンドウからGameOverオブジェクトをドラッグ&ドロップしてメンバ変数にオブジェクトをセットします。
ボールを失ったらゲームオーバー画面を出す
ゲームオーバー画面を表示するスクリプトを作る
ゲームオーバー画面を表示して、タイトル画面やボール、プレイヤー、敵を非表示させるという動きを作ります。
MainManagerBehaviourに以下のメソッドを追加します。
public void OnBallLost()
{
gameTitle.gameObject.SetActive(false);
gameClear.gameObject.SetActive(false);
gameOver.gameObject.SetActive(true);
player.gameObject.SetActive(false);
ball.gameObject.SetActive(false);
enemyUnit.gameObject.SetActive(false);
}
Ball が Player より下の位置なったらゲームオーバー
BallBehaviour の中でボールの座標を調べるスクリプトを作ります。
public class BallBehaviour : MonoBehaviour
{
private MainManagerBehaviour mainManager;
public void Startup(MainManagerBehaviour manager)
{
this.mainManager = manager;
this.transform.position = new Vector3(0.0f, -3.5f, 0.0f);
this.gameObject.SetActive(true);
Vector2 vec = new Vector2(3.0f, 4.0f);
Rigidbody2D rigidbody = this.GetComponent<Rigidbody2D>();
rigidbody.velocity = vec;
}
void Update()
{
if (null == mainManager) return;
if (transform.position.y < -4)
{
mainManager.OnBallLost();
}
}
}
まずは Ball から MainManagerへアクセスできるようにします。
Ball を初期化するStartupメソッドの引数でMainManagerBehaviourを受け取り(6行目)、それをメンバ変数に保存しておきます(8行目)。
さらに、Updateメソッドの中で Ball の Y座標をチェックして Player の位置より下になったら OnBallLost メソッドを呼び出すようにします(21~24行目)。
ゲームオーバー画面のボタンを押されたらタイトル画面に戻る
ボタンを押したらメソッドを呼び出す
前回のゲームクリア画面でやったことと同じですね。
ボタンを選択して Inspector ウィンドウから On Click () にメソッドを追加します。
「+」ボタンをクリックして、そこにMainManagerオブジェクトをドラッグ&ドロップでセット。さらにOnReturnToTitleButtonClickedメソッドを選択します。
ゲームオーバー画面のボタンを押されたらコンティニュー
コンティニューのスクリプトを作る
ゲームスタートの時とやることは似ていますが、敵は初期化せず今の状態のまま表示します。
MainManagerBehaviourに以下のメソッドを追加します。
public void OnContinueButtonClicked()
{
gameTitle.gameObject.SetActive(false);
gameClear.gameObject.SetActive(false);
gameOver.gameObject.SetActive(false);
player.gameObject.SetActive(true);
ball.Startup(this);
enemyUnit.gameObject.SetActive(true);
}
ボタンを押したらメソッドを呼び出す
ボタンを選択して Inspector ウィンドウから On Click () にメソッドを追加します。
「+」ボタンをクリックして、そこにMainManagerオブジェクトをドラッグ&ドロップでセット。さらにOnContinueButtonClickedメソッドを選択します。
これでゲームオーバーの仕組みが出来上がりました。
これが今回の成果です。
つづく