Skip to content

[Unity] 製作『暫停』的功能

在許多遊戲當中都存在著『暫停』(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


Read More

Tags:

Leave a Reply