見出し画像

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メソッドを選択します。


これでゲームオーバーの仕組みが出来上がりました。
これが今回の成果です。


つづく


次回:4-1ボールをアニメーションさせる


いいなと思ったら応援しよう!

この記事が参加している募集