Skip to main content

ゲーム終了処理

次、「ゲームクリア」と「ゲームオーバー」の処理を追加しましょう。

ゲームオーバー

このゲームでは、残機3つがあり、ボールが失ったら残機1つが減る。残機がゼロになった場合は「ゲームオーバー」にする。すでに「ボールが失ったら…」(BallDestroy)という処理があるので、これを活用できる。

ゲーム監督クラス「GameManager」を作成し、残機の数を追跡しましょう。BallDestroyのとき、GameManagerを呼び出し、残機を減らす処理を実装してみましょう:

// ゲーム監督
public class GameManager : MonoBehaviour
{
    // 残機の数
    private int _lives;

    private void Start()
    {
        _lives = 3; // 3個で始まる
    }
    
    // ボール廃止されたときに呼び出される
    public void BallDestroyed()
    {
        // 残機が減る
        _lives--;
        if (_lives == 0)
        {
            // とりあえず、コンソールで表示
            Debug.Log("ゲームオーバー");
        }
    }
}

そして、BallDestroy 側では…

// ボールを削除し、お知らせする
public class BallDestroy : MonoBehaviour
{
    // BallShooterに知らせる!
    [SerializeField] 
    private BallShooter ballShooter; 
    
    // GameManagerにも知らせる!
    [SerializeField] 
    private GameManager gameManager;
    
    // トリガーの中に何か入ったら:
    private void OnTriggerEnter2D(Collider2D other)
    {
        // ゲームオブジェクトを廃止(削除)する
        Destroy(other.gameObject);

        // メソッドを呼び出し、知らせる
        ballShooter.BallDestroyed();
        gameManager.BallDestroyed();
    }
}

シーンにゲーム監督スクリプトを新しいゲームオブジェクトにアタッチし、BallDestroy の参照を付けてください:

image.png

これで3つのボールをなくして、「ゲームオーバー」になることを確認してください。