Last Updated on 2021-11-03 by Clay
在許多遊戲當中都存在著『暫停』(pause)這樣的功能,方便玩家們在遊玩之際,若另有外事可中斷遊玩,並在回來之後繼續遊戲下去。
在 Unity 當中,若要完成暫停這樣功能其實非常容易,
- 讓遊戲時間停止
- 跳出暫停選單(可以很複雜、也可以很簡單)
- 讓遊戲時間恢復正常
以下我就簡單紀錄該如何完成這些功能。
製作暫停選單
一開始我推薦先製作暫停選單,這樣最方便我們確認遊戲是否已經暫停了。同時也正如上面所說,暫停的選單可以很複雜、也可以很單純。在這裏我以最單純的『暫停文字』來作為遊戲暫停的象徵。
我還加上了透明的黑色遮罩。
平時這個元件需要將它選擇為不激活(deactivate),而是在暫停時才激活(activate)。
讓遊戲時間停止
這裡我們建造一個 GameManager 的遊戲物件,將它掛上 GameManager.cs 這個腳本。
腳本內容如下:
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
// Pause UI
public Button PauseButton;
public GameObject PauseWindow;
private bool isPause;
void Start()
{
isPause = false;
PauseButton.onClick.AddListener(PauseGame);
}
void PauseGame()
{
isPause = !isPause;
if (isPause == true)
{
PauseButton.image.sprite = Resources.Load<Sprite>("Sprites/resume");
PauseWindow.gameObject.SetActive(true);
Time.timeScale = 0;
}
else
{
PauseButton.image.sprite = Resources.Load<Sprite>("Sprites/pause");
PauseWindow.gameObject.SetActive(false);
Time.timeScale = 1;
}
}
}
Time.timeScale = 0
代表遊戲時間沒有在流動、Time.timeScale = 1
代表遊戲時間正常流動。
同時別忘了在遊戲編輯器中將 PauseButton
(暫停鍵)和 PauseWindow
(暫停視窗)放入腳本的欄位中。
現在,試跑看看效果。
References
- https://gamedevbeginner.com/the-right-way-to-pause-the-game-in-unity/ (若你仍有暫停時需要動作的遊戲物件,可以參考由 John French 所寫的這篇教學)
- https://answers.unity.com/questions/1230216/a-proper-way-to-pause-a-game.html