今回はポーズ機能を実装する方法をご紹介します。アクションゲームなどを制作していると、時間を止めたいと思うことがあるでしょう。例えばメニュー画面を開くときなどです。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 といった小数を指定することで実現できます。
これで実行すると、ポーズボタンを押すと時間が停止し、再開ボタンを押すと再び時が動き出します。
PausePanel の色や、各種UIのオン・オフなどの処理を加えて、見栄えを良くしましょう。
以上、ポーズ機能の実装方法でした。
びっくりするほど簡単でしたね。