はじめに
前回の記事では、スコア機能の実装を行いました。今回はその発展として、「ゲームオーバー画面」の表示と、「スコアの保存」「タイトルへの戻り処理」など、ゲームの流れを完成させる機能を追加していきます。
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. まとめ
ゲームオーバー画面の実装により、ゲームの流れが完結し、プレイの目的や達成感も生まれました。
次はタイトル画面の作成や、ハイスコアの記録機能を追加して、より完成度の高いゲームを目指しましょう!