2Dゲーム制作

【初心者向け】Unityでゲームオーバー画面を実装しよう|スコア保存とシーン遷移

はじめに

前回の記事では、スコア機能の実装を行いました。今回はその発展として、「ゲームオーバー画面」の表示と、「スコアの保存」「タイトルへの戻り処理」など、ゲームの流れを完成させる機能を追加していきます。


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. まとめ

ゲームオーバー画面の実装により、ゲームの流れが完結し、プレイの目的や達成感も生まれました。
次はタイトル画面の作成や、ハイスコアの記録機能を追加して、より完成度の高いゲームを目指しましょう!