본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(68) - Monster Killer(30)

by jyppro 2023. 7. 3.

Monster Killer(30)

저번에는 메인씬에서 게임씬으로 버튼클릭을 통해 이동하는 것을 해보았습니다. 오늘은 일시정지 기능과 함께 일시정지 할 때 등장하는 화면을 구성해보도록 하겠습니다.

 

일시정지 UI 만들기

이전에 메인페이지를 만들 때 사용했던 Stone UI를 사용해서 일시정지 버튼을 만들겠습니다. 그리고 버튼클릭과 함께 ESC 키를 사용하면 일시정지가 되도록 기능을 만들겠습니다. 이렇게 두가지로 구성하는 이유는 버튼은 모바일 폰으로 게임을 하는 사용자에게 적합하고 ESC키는 컴퓨터로 플레이하는 유저에게 적합하기 때문입니다.

일시정지-버튼
일시정지 버튼

게임화면 좌측 상단에 일시정지 버튼이 위치하도록 만들어 주었습니다. 이제 일시정지가 되면 Pause가 되었다고 유저가 직관적으로 알 수 있게 해주는 화면을 만들어 줄 것 입니다.

 

Pause 화면

일시정지-화면
일시정지 화면

이전에 게임오버 페이지처럼 검은화면의 투명도를 조절하고 일시정지가 되었다고 알려주는 글씨를 적어준 화면을 만들었습니다. 이제 일시정지 버튼을 눌렀을 때 혹은 ESC키를 눌렀을 때 해당화면이 등장하면서 게임이 멈추는 기능을 만들어 보겠습니다.

 

GamePause

using UnityEngine;

public class GamePause : MonoBehaviour
{
    private bool isPaused = false;
    private GameObject GamePauseUI;

    private void Start()
    {
        GamePauseUI = GameObject.Find("PausePage");
        GamePauseUI.SetActive(false);
        if(GetComponent<UnityEngine.UI.Button>() != null){ GetComponent<UnityEngine.UI.Button>().onClick.AddListener(TogglePause); }
    }

    private void Update()
    { if (Input.GetKeyDown(KeyCode.Escape)) { TogglePause(); } }

    private void TogglePause()
    {
        isPaused = !isPaused;
        if (isPaused)
        {
            GamePauseUI.SetActive(true);
            Time.timeScale = 0f;
        }
        else
        {
            GamePauseUI.SetActive(false);
            Time.timeScale = 1f;
        }
    }
}

ESC키를 누르거나 일시정지 UI를 클릭 및 터치하면 Pause 화면이 등장하고 게임이 일시정지되도록 하는 코드입니다. 여기서 주의할 점은 만들어놓은 PausePage의 SetActive()를 Start()에서 false로 설정하지않고 하이어라키창에서 Enable을 꺼놓고 코드로 조작한다면 코드에서 인식하지 못하므로 코드를 통해서 온오프 해주어야 합니다.

 

이제 처음부터 게임을 실행하여 플레이 버튼을 통해 게임씬으로 넘어가서 일시정지 버튼과 ESC키를 통해 게임 일시정지를 해보겠습니다.

 

게임실행

게임-일시정지
게임 일시정지

일시정지하면 이렇게 Pause 화면이 뜸과 동시에 게임이 멈추게 됩니다. 다시 원래 상태로 돌아가려면 ESC키를 다시 누르면 됩니다. 그리고 만드는 과정에서 하나 빠뜨린게 있는데 Pause화면에서 터치를 통해 Pause를 풀어주는 버튼을 만들어 줘야 합니다. 그건 다음에 해보겠습니다.

 

<NEXT>

오늘은 일시정지 기능을 구현하는 것에 대해서 다뤄보았습니다. 다음에는 오늘 놓친 Pause를 해제하는 버튼을 만들어주고, MainScene에 Settings버튼과 Exit버튼의 기능을 구현해 보도록 하겠습니다. 감사합니다.