🔍本記事では Rigidbody や CharacterController を使わずに、C# スクリプトのみでプレイヤーを移動させる立体迷路 の作り方を解説しています。
今回は ゲームを一時停止できるポーズメニュー と スタート位置からやり直せるリスタート機能 を実装します。
✅前回の記事はこちら👇
ポーズメニューを作成する
ポーズボタンの追加
- ヒエラルキーのパネル内に UI → ボタン を追加
- テキストを「Pause」に変更
- このボタンを押すとポーズメニューが開くようにします。

ポーズ画面を作成
- ヒエラルキーの Canvas に UI → パネル を追加(名前を「PausePanel」などにする)
- その中に Resume(続ける) ボタンと Restart(リスタート) ボタンを追加

ポーズ用スクリプトを作成する
新しいスクリプト 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の初期位置を設定する
リスタート時にプレイヤーを正しい位置に戻すために、初期位置を管理します。
- ヒエラルキーに空のオブジェクト
PlayerStartを作成 - 位置と回転を初期位置に設定
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 のインスペクターで startPoint に PlayerStart を割り当ててください。
リスタート処理を連携する
PauseManager に PlayerMover の参照を追加して、Restart時に初期位置へ戻します。
public PlayerMover playerMover;
public void RestartGame()
{
Time.timeScale = 1f;
if (playerMover != null)
{
playerMover.ResetToStart();
}
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
動作確認
- Pauseボタン → ゲームが停止しポーズメニューが開く
- Resumeボタン → ゲーム再開
- Restartボタン → プレイヤーが初期位置に戻り、ゲームをやり直せる
まとめ
今回はポーズメニューとリスタートボタンの作り方を解説しました。
次回はフロア別ミニマップを作って、現在のフロアを表示する方法を紹介します。




コメント