こんにちは!夜の街2Dアクションゲームを制作中の怪獣です🦖
今回は「プレイヤーがマップから落下したら、ゲームオーバーUIを表示する」実装方法を解説します。
落下判定は2Dアクションでよく使う定番ギミックです。
ミスしたかが分かりやすくなるので、よりゲームのテンポも良くなります!
この記事では、
- ゲームオーバーUIはすでに用意してある前提
- 「プレイヤーがマップから落下したかどうか判定する」
という ロジック部分のみを扱います。
ゲームオーバーUIの作成方法自体は、すでに別記事で解説しています。
詳しくは、先にこちらをご覧ください⬇️
この記事ですること
今回やることはシンプルで、流れはこんな感じです。
- プレイヤーの Y座標が一定より下になったら「落下」と判定
- MainManager に「ゲームオーバーになった」と伝える
- 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();
}
- プレイヤーの現在位置を取得
- Y座標が落下ライン(Inspectorで設定したもの)より下かチェック
- 下ならゲームオーバー
という流れです。
なぜ「落下判定」と「ゲームオーバー処理」を分けるのか?
ここが設計上大事なポイントです。
- Player
➡️「落ちたかどうか」を判断するだけ - MainManager
➡️「ゲームオーバーにする」責任だけを持つ
こうしておくと、
- HPが0になった
- トゲに当たった
- 制限時間切れ
なども、すべて
_mainManager.Show();
で統一することができます🦖
落下ラインの調整方法
[SerializeField] private float _fallDeadLineY = -10f;
- ステージの一番下より少し低めに設定
- Inspector から調整できるようにしておく
これだけで、
ステージごとの微調整がとても楽になります。
まとめ
- 今回は 「ゲームオーバーにする条件」だけを実装
- ゲームオーバー処理は MainManager に集約すると拡張しやすい
この記事では、「プレイヤーがマップから落下したかどうか判定する」方法について解説しました。
最後まで読んでいただきありがとうございました。
この記事が少しでもゲーム制作に役立てたら嬉しいです🦖


コメント