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