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

게임개발 중급(15) - 2D 플랫포머 게임 만들기(10)

by jyppro 2023. 5. 5.

2D 플랫포머 게임 만들기(10)

 

저번에는 장애물을 설치하고 플레이어가 닿으면 죽으며, 정해진 목숨을 전부 사용하면 게임오버가 되도록 게임을 설계해 보았습니다. 아직 게임 자체를 멈추진 못하지만, 플레이를 할 수 없는 상태로는 만들었습니다. 이번에는 게임 자체를 멈출 수 있는 방법에 대해 한번 알아보고, 고정된 위치에 있는 장애물이 아닌, 움직이는 장애물을 한번 만들어 보겠습니다.

 

게임 멈추기

게임의 진행을 멈추는 방법은 의외로 어렵지 않습니다. Time.timeScale 값을 변경하여 게임 시간을 조절할 수 있습니다. 이 방법은 게임을 느리게하거나 빠르게할 때 사용합니다. Time.timeScale 값을 0으로 설정하면 게임이 멈추고, 1보다 큰 값을 설정하면 게임이 빨라집니다. 그렇다면 life가 0이 되었을 때, Time.timeScale 값을 0을 만들어 주면 게임이 멈추게 됩니다.

Time.timeScale = 0f;

이 코드만 if문에 추가해주면, 게임을  멈출 수 있습니다.

 

게임-오버
게임 오버된 화면

이미지라 확인은 안되지만, 게임오버가 되어 게임이 멈춘 모습입니다.

 

하지만, 저희는 좀 더 발전시키고 싶습니다. ESC 키를 누르면 멈추고, 다시 ESC를 누르면 진행되도록 일시정지 기능을 한번 추가로 만들어 보겠습니다.

 

일시정지 기능(ESC)

if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (isPaused)
            {
                Time.timeScale = 1f;
                isPaused = false;
            }
            else
            {
                Time.timeScale = 0f;
                isPaused = true;
            }
        }

우선, 상태를 확인할 수 있는 isPaused 변수를 선언하고, Update() 안에 해당 코드를 작성해줍니다. 간단히 설명하면, 게임이 진행중일 때 ESC를 누르면 게임이 멈추고 isPaused가 True가 됩니다. 반대로 게임이 멈춘 상태에서 누르면 isPaused가 false가 되면서 게임이 다시 실행됩니다.

 

일시정지 기능이 잘 작동하지만, 게임이 멈추는 것을 알기 어렵기 때문에, 시각적으로 표현해주기 위해 Game Pause 라고 텍스트를 띄워 보겠습니다.

 

시각적으로 보여주기

public Text PauseText;

UI로 텍스트를 생성하고, 스크립트에서 해당 코드로 선언한 후에

 

if (isPaused)
            {
                Time.timeScale = 1f;
                isPaused = false;
                PauseText.gameObject.SetActive(false);
            }
            else
            {
                Time.timeScale = 0f;
                isPaused = true;
                
                // ESC 키 입력 시 Text UI를 활성화
                PauseText.gameObject.SetActive(true);
            }

위에서 작성했던 코드에 Text UI를 활성화 - 비활성화 시켜주는 코드를 추가합니다. 처음 게임을 시작하면 멈춤상태가 아니므로 기본적으로 해당 UI는 SetActive가 false인 상태로 시작해야 합니다.

이 코드를 작동 시키려면, PauseText를 선언한 스크립트인 플레이어에게 적용되어 있는 PlayerController에 저희가 생성한 UI를 드래그 앤 드롭으로 연결 시켜주어야 합니다. 모든 작업을 마친 후, 실행 시켜보면..

 

일시정지
일시정지

이렇게 문구가 뜨면서 게임이 멈춥니다. 다시 ESC 키를 누르면 문구가 사라지고 게임이 다시 진행됩니다.

원래는 오늘 움직이는 장애물까지 하는 것이 계획이었으나, 시간관계상 다음으로 미루도록 하겠습니다.

 

<NEXT>

이번에는 게임 자체를 멈출 수 있는 방법에 대해 알아보고, 추가로 ESC 키 입력을 통한 일시정지기능과 시각적 표현까지 구현 하였습니다. 다음에는 원래 이번에 하려고 계획했었던 움직이는 장애물을 한번 만들어 보겠습니다. 감사합니다.