Unityで立体迷路を作る⑥|ポーズメニューとリスタート機能を実装する

Unity立体迷路 ゲームを一時中断するポーズメニューを作成した画面 ゲームの作り方
ポーズメニュー画面

🔍本記事では Rigidbody や CharacterController を使わずに、C# スクリプトのみでプレイヤーを移動させる立体迷路 の作り方を解説しています。

今回は ゲームを一時停止できるポーズメニュースタート位置からやり直せるリスタート機能 を実装します。

✅前回の記事はこちら👇

スポンサーリンク

ポーズメニューを作成する

ポーズボタンの追加

  • ヒエラルキーのパネル内に UI → ボタン を追加
  • テキストを「Pause」に変更
  • このボタンを押すとポーズメニューが開くようにします。
Unity立体迷路ポーズボタンの作成

ポーズ画面を作成

  • ヒエラルキーの CanvasUI → パネル を追加(名前を「PausePanel」などにする)
  • その中に Resume(続ける) ボタンと Restart(リスタート) ボタンを追加
Unity立体迷路 ゲームを一時中断するポーズメニューを作成した画面

ポーズ用スクリプトを作成する

新しいスクリプト PauseManager.cs を作成し、以下のコードを記述します。

using UnityEngine;
using
UnityEngine.UI;

public class PauseManager
: MonoBehaviour
{
    public
GameObject pausePanel;
    public
Button resumeButton;
    public
Button restartButton;

  private
bool isPaused = false;

  void Start()
    {
        pausePanel.SetActive(false);
   resumeButton.onClick.AddListener(ResumeGame);
        restartButton.onClick.AddListener(RestartGame);
    }

    public void PauseGame()
    {
        if (isPaused) return;
      Time.timeScale = 0f; // 一時停止
        pausePanel.SetActive(true);
        isPaused = true;
    }

public void ResumeGame()
    {
        Time.timeScale = 1f; // 再開
        pausePanel.SetActive(false);
        isPaused = false;
    }

    public void RestartGame()
    {
        Time.timeScale = 1f; // 時間を戻してからリロード
    }
}

インスペクターの設定

  • PauseボタンPauseManager スクリプトをアタッチ
  • OnClick() のイベントPauseManager → PauseGame() を設定
  • Resume / Restart ボタンも同様にアサイン

Playerの初期位置を設定する

リスタート時にプレイヤーを正しい位置に戻すために、初期位置を管理します。

  1. ヒエラルキーに空のオブジェクト PlayerStart を作成
  2. 位置と回転を初期位置に設定

PlayerMover に初期化コードを追加

public Transform startPoint;
private Vector3 initialPosition;
private Quaternion initialRotation;

void Start()
{
 if (startPoint != null)
 {
  initialPosition = startPoint.position;
  initialRotation = startPoint.rotation;
  transform.position = initialPosition;
  transform.rotation = initialRotation;
 }
 else
 {
  Debug.LogWarning(“Start point not assigned to PlayerMover!”);
 }
}

// リスタート時に呼び出す
public void ResetToStart()
{
 isMoving = false;
 isRotating = false;
 transform.position = initialPosition;
 transform.rotation = initialRotation;
}

Player のインスペクターで startPointPlayerStart を割り当ててください。

リスタート処理を連携する

PauseManagerPlayerMover の参照を追加して、Restart時に初期位置へ戻します。

public PlayerMover playerMover;

public void RestartGame()
{
 Time.timeScale = 1f;

 if (playerMover != null)
 {
 playerMover.ResetToStart();
 }

 SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

動作確認

  • Pauseボタン → ゲームが停止しポーズメニューが開く
  • Resumeボタン → ゲーム再開
  • Restartボタン → プレイヤーが初期位置に戻り、ゲームをやり直せる

まとめ

今回はポーズメニューとリスタートボタンの作り方を解説しました。
次回はフロア別ミニマップを作って、現在のフロアを表示する方法を紹介します。

コメント

タイトルとURLをコピーしました