はじめに
前回の記事では、スコア機能の実装を行いました。今回はその発展として、「ゲームオーバー画面」の表示と、「スコアの保存」「タイトルへの戻り処理」など、ゲームの流れを完成させる機能を追加していきます。
1. ゲームオーバー判定と画面の表示
① GameOverManager の作成
GameOverManager.cs を作成し、以下のコードを記述します:
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
public class GameOverManager : MonoBehaviour
{
    public GameObject gameOverPanel;
    public TMPro.TMP_Text finalScoreText;
    public void ShowGameOver(int score)
    {
        gameOverPanel.SetActive(true);
        finalScoreText.text = "Final Score: " + score.ToString();
    }
    public void Retry()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
    public void BackToTitle()
    {
        SceneManager.LoadScene("TitleScene");
    }
}
② ゲームオーバーパネルの準備
- Canvas内にパネルを作成し、「GameOverPanel」と命名
 - TextMeshProでスコア表示用のTextを配置(
FinalScoreText) - 「リトライ」「タイトルに戻る」ボタンも配置し、それぞれのボタンに 
Buttonコンポーネントを追加し、インスペクターで OnClick に GameOverManager をアタッチ →Retry()やBackToTitle()を指定 GameOverPanelは初期状態で非表示に
2. ライフ0時にゲームオーバー処理を呼び出す
PlayerController に以前記入した
if (life <= 0)
{
Debug.Log(“ゲームオーバー!”);
UnityEngine.SceneManagement.SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
}
Debug.Log(“ゲームオーバー!”); の部分を以下に書き換え:
if (life <= 0)
{
    int finalScore = ScoreManager.instance.score;
    PlayerPrefs.SetInt("LastScore", finalScore);
    PlayerPrefs.Save();
    GameObject.FindObjectOfType().ShowGameOver(finalScore);
    Time.timeScale = 0f; // ゲーム停止(必要なら)
}
 
3. スコアの保存(PlayerPrefs)
- 上記のように、ゲームオーバー時に 
PlayerPrefs.SetInt("LastScore", score);を呼び出すことで保存できます - 他のシーンでスコアを取得する場合:
 
int lastScore = PlayerPrefs.GetInt("LastScore", 0);
4. 実行して確認しよう
- ライフ0でゲームオーバー画面が表示されるか
 - スコアが正しく表示されるか
 - リトライ、タイトルに戻るボタンが機能するか
 - スコアが正しく保存・読み込みできるか
 
5. まとめ
ゲームオーバー画面の実装により、ゲームの流れが完結し、プレイの目的や達成感も生まれました。
次はタイトル画面の作成や、ハイスコアの記録機能を追加して、より完成度の高いゲームを目指しましょう!