【Unity】ポーズ機能を実装する方法

pause.png

 今回はポーズ機能を実装する方法をご紹介します。アクションゲームなどを制作していると、時間を止めたいと思うことがあるでしょう。例えばメニュー画面を開くときなどです。Unityには Time という時間を司る神様がいらっしゃるので、その神様に働いてもらいます。

必要なパーツの準備

1) ポーズする Button を追加します。
 ヒエラルキー上で右クリック > UI > Button
 名前を「Pause」にしておきます。 
 同時に作成される親Canvasの名前は「Menu」にしておきます。

2) ポーズ用の Panel を追加します。
 ヒエラルキー上で右クリック > UI > Panel
 名前を「PausePanel」にしておきます。

3) レジューム用の Button を追加します。
 Panel を選択して右クリック > UI > Button
 PausePanelの子オブジェクトにしておきます。
 名前を「Resume」にしておきます。

最低限必要なパーツはこの3つです。

ポーズ機能をつくる

using UnityEngine;
using UnityEngine.UI;

public class Menu : MonoBehaviour
{
[SerializeField] private Button pauseButton;
[SerializeField] private GameObject pausePanel;
[SerializeField] private Button resumeButton;

void Start()
{
pausePanel.SetActive(false);
pauseButton.onClick.AddListener(Pause);
resumeButton.onClick.AddListener(Resume);
}

private void Pause()
{
Time.timeScale = 0; // 時間停止
pausePanel.SetActive(true);
}

private void Resume()
{
Time.timeScale = 1; // 再開
pausePanel.SetActive(false);
}
}
Menu.cs を作成したら、Canvas「Menu」にアタッチします。
Inspector上で各オブジェクトを指定できるので、ヒエラルキーからPause, PausePanel, Resume をドラッグ&ドロップしてそれぞれ指定します。

Time.timeScale で時間の流れを指定しています。
1 で通常速度、0 で完全に停止します。
完全停止ではなくFF7リメイクみたいな超スローモーションにしたい場合は 0.01f といった小数を指定することで実現できます。


これで実行すると、ポーズボタンを押すと時間が停止し、再開ボタンを押すと再び時が動き出します。

pause1.png

PausePanel の色や、各種UIのオン・オフなどの処理を加えて、見栄えを良くしましょう。


以上、ポーズ機能の実装方法でした。
びっくりするほど簡単でしたね。