【Unity入門⑬】落下したらゲームオーバー!ゲームオーバーUIを表示させよう

Unity2D入門シリーズ

こんにちは!夜の街2Dアクションゲームを制作中の怪獣です🦖
今回は「プレイヤーがマップから落下したら、ゲームオーバーUIを表示する」実装方法を解説します。

落下判定は2Dアクションでよく使う定番ギミックです。
ミスしたかが分かりやすくなるので、よりゲームのテンポも良くなります!

この記事では、

  • ゲームオーバーUIはすでに用意してある前提
  • 「プレイヤーがマップから落下したかどうか判定する」

という ロジック部分のみを扱います。

ゲームオーバーUIの作成方法自体は、すでに別記事で解説しています。
詳しくは、先にこちらをご覧ください⬇️


この記事ですること

今回やることはシンプルで、流れはこんな感じです。

  1. プレイヤーの Y座標が一定より下になったら「落下」と判定
  2. MainManager に「ゲームオーバーになった」と伝える
  3. MainManager が ゲームオーバーUIを表示する

事前確認

  • 「【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう」の章を実装済である提で解説を進めています
  • ゲームオーバーUI、MainManager が既に作成済である前提で解説を進めています

①Player.cs(落下を検知する処理だけ書く)

Player 側では
「落ちたかどうか」だけを判断します。
落下判定は、一番分かりやすい Y座標チェックを使います。

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float _fallDeadLineY = -10f;

    private MainManager _mainManager;
    private bool _isDead;

    private void Start()
    {
        _mainManager = FindObjectOfType();
    }

    private void Update()
    {
        if (_isDead) return;

        if (transform.position.y < _fallDeadLineY)
        {
            _isDead = true;
            _mainManager.Show();
        }
    }
}

②各処理の説明

落下ラインの設定

[SerializeField] private float _fallDeadLineY = -10f;
  • この Y 座標より下に行ったら「落下した」と判断するライン

Inspectorから調整できるので、ステージが変わっても数値を変えるだけで対応可能!


MainManager を取得

_mainManager = FindObjectOfType<MainManager>();
  • シーン内にある MainManager を探して使えるようにしている

➡️Player は「ゲームオーバーにしてほしい」と MainManager にお願いする役です。


Update() で落下判定

if (_isDead) return;
  • すでに落下した後は何もしないようにしています

if (transform.position.y < _fallDeadLineY)
{
    _isDead = true;
    _mainManager.Show();
}
  1. プレイヤーの現在位置を取得
  2. Y座標が落下ライン(Inspectorで設定したもの)より下かチェック
  3. 下ならゲームオーバー
    という流れです。

なぜ「落下判定」と「ゲームオーバー処理」を分けるのか?

ここが設計上大事なポイントです。

  • Player
    ➡️「落ちたかどうか」を判断するだけ
  • MainManager
    ➡️「ゲームオーバーにする」責任だけを持つ

こうしておくと、

  • HPが0になった
  • トゲに当たった
  • 制限時間切れ

なども、すべて

_mainManager.Show();

で統一することができます🦖


落下ラインの調整方法

[SerializeField] private float _fallDeadLineY = -10f;
  • ステージの一番下より少し低めに設定
  • Inspector から調整できるようにしておく

これだけで、
ステージごとの微調整がとても楽になります。


まとめ

  • 今回は 「ゲームオーバーにする条件」だけを実装
  • ゲームオーバー処理は MainManager に集約すると拡張しやすい

この記事では、「プレイヤーがマップから落下したかどうか判定する」方法について解説しました。

最後まで読んでいただきありがとうございました。
この記事が少しでもゲーム制作に役立てたら嬉しいです🦖

コメント

タイトルとURLをコピーしました