본문 바로가기
도전! N잡러!/도전! 게임 개발!

TAP FLOAT 개발 일기 #14

by NAWE 2023. 10. 11.
반응형

안녕하세요. 나위입니다.

STUDIO NAWE의 첫 타이틀. TAP FLOAT의 개발 일기를 찾아주셔서 감사합니다.

 

이전 포스팅에서 이어지는 내용이오니, 못 보신 분들은 아래 링크로 앞 내용을 먼저 보고 오시는 게 좋겠어요!

어서오세요! TAP FLOAT 개발 일기입니다!

 

TAP FLOAT 개발 일기 #0 바로가기 ◀

TAP FLOAT 개발 일기 #1 바로가기 ◀

TAP FLOAT 개발 일기 #2 바로가기 ◀

TAP FLOAT 개발 일기 #3 바로가기 ◀

TAP FLOAT 개발 일기 #4 바로가기 ◀

TAP FLOAT 개발 일기 #5 바로가기 ◀

TAP FLOAT 개발 일기 #6 바로가기 ◀

TAP FLOAT 개발 일기 #7 바로가기 ◀

TAP FLOAT 개발 일기 #8 바로가기 ◀

TAP FLOAT 개발 일기 #9 바로가기 ◀

TAP FLOAT 개발 일기 #10 바로가기 ◀

TAP FLOAT 개발 일기 #11 바로가기 ◀

TAP FLOAT 개발 일기 #12 바로가기 ◀

TAP FLOAT 개발 일기 #13 바로가기 ◀

 

그럼, 시작합니다!


지난 포스팅에서 우리는 GameManager 스크립트를 수정했습니다.

그러면서 등록해야 할 게임 오브젝트 변수들을 잔뜩 만들었었죠.

GameManagerInspector 창을 확인하니 비어있는 칸이 이렇게나 많습니다.

None 이라고 표시된 것은 모두 채워줘야 합니다.

이제, 각각 알맞는 오브젝트들을 드래그 & 드롭으로 끌어서 할당해야겠어요.

 

1. Point Panel에는 Canvas - Point Panel을 끌어서 배치합니다.

2. Game Over Panel에는 Canvas - Gameover Panel을 배치하고,

3. Game Over Score Text에는 Canvas - Gameover Panel - Gameover Score을.

4. Game Over Best Score Text에는 Canvas - Gameover Panel - Gameover Best Score을 끌어다 둡시다.

 

드래그 & 드롭으로 알맞은 자리를 배치해줍시다.

이렇게 되었다면 Gameover Panel을 선택하여 비활성화를 시켜줄게요.

당연한 이야기겠지만.. 게임이 시작하기 전부터 GameOver라는 글자가 떠있으면 안되는 것이니까요.

Gameover Panel은 Game이 Over 되었을 때 나타나야 하는 것이니, 비활성화를 시켜서 보이지 않도록 처리해 둡니다.

Inspector 바로 아래의 체크를 해제해주세요.

이렇게 하면 다 되었느냐?

아닙니다. 마지막 처리가 남았어요.

그것은 바로, Player. 즉, 조니가 죽었을 때 GameManagerSetGameOver 함수를 호출하도록 하는 것입니다.

 

안녕, 조니?

오랜만에 보는 조니의 숨막히는 뒷태로군요.

우리는 지난 포스팅에서... 그러니까, 정확히는 개발 일기 #9에서 Player 스크립트를 만들었었습니다.

그 스크립트에서는 조니의 죽음을 처리하고 있었죠.

 

바로 이런 코드였어요.

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Wall")
        {
            Debug.Log("Wall Crash : Game Over");
            Destroy(gameObject);
        }

        if (other.gameObject.tag == "Enemy")
        {
            Debug.Log("Enemy Crash : Game Over");
            Destroy(gameObject);
        }
    }

Player의 Collider. 즉, 조니의 충돌 영역이 트리거로 설정된 다른 충돌 영역과 부딪치면...

그리고 그 충돌 영역의 Tag 이름이 'Wall'이거나 'Enemy'이면 조니를 Destroy. '제거'한다는 내용의 코드였습니다.

Tag가 Wall이면 Wall Crash : Game Over라는 메시지를 띄우도록 하고.

Tag가 Enemy이면 Enemy Crash : Game Over라는 메시지를 띄우도록 해서 차별을 줬었죠.

 

이 내용에 한가지 내용을 더 추가할 거에요.

바로 이렇게요.

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Wall")
        {
            Debug.Log("Wall Crash : Game Over");
            GameManager.instance.SetGameOver();
            Destroy(gameObject);
        }

        if (other.gameObject.tag == "Enemy")
        {
            Debug.Log("Enemy Crash : Game Over");
            GameManager.instance.SetGameOver();
            Destroy(gameObject);
        }
    }

각 if문에 한 줄씩 똑같은 코드가 추가되었어요.

바로 아래의 한 줄인데, 대략 이런 내용입니다.

            GameManager.instance.SetGameOver();

 

"GameManager 스크립트에서 SetGameOver 함수를 실행시켜."

 

간단한 내용이죠?

하지만, 저 한 줄을 쓰기 위해서 우리는 GameManager에서 싱글톤을 사용했었습니다.

GamaManagerInstance화 하여, 다른 스크립트에서도 자유롭게(충돌없이) 함수를 가져다 쓸 수 있도록 세팅하는 것이었죠.

 

그리고 GameManager에서 만들었던 'SetGameOver'라는 이름의 함수는 바로 이 작업을 위한 내용이었습니다.

 SetGameOver라는 함수는 바로 직전 포스팅에서 만들었던 내용이었죠?

    public void SetGameOver()
    {
        isGameOver = true;

        Spawner spawner = FindObjectOfType<Spawner>();
        if(spawner != null)
        {
            spawner.StopEnemyRoutine();
        }

        Invoke("ShowGameOverPanel", 0.4f);
    }

1. 게임 오버 상태를 True로 변경하고,

2. 게임 오브젝트 중 Spawner을 찾아서 방해 요소의 리스폰을 중지시킨 뒤,

3. ShowGameOverPanel함수를 실행시켜서 Game Over UI가 보여질 수 있도록 하는 내용이었습니다.

 

이렇게, 플레이어 스크립트의 수정까지 완료되었으면 제대로 동작하는지를 확인해 볼 차례입니다.

두근거리는 마음으로 게임을 실행시켜 보면...

죽으면 게임오버!

조니가 죽은 뒤, 게임오버 패널이 정상적으로  보여지고 있네요!

하지만 아직은 게임의 재시작이 되지 않고 있습니다.

게임 오버 패널이 나타났을 때, 화면을 터치하면 재시작이 될 수 있도록 프로젝트를 수정해야겠어요.

 

아직 멀었어...(지끈)

우선, GameManager 스크립트에 게임을 재시작시키는 함수를 추가하려고 합니다.

함수의 이름은 PlayAgain이라 붙였어요.

코드 내용은 아래와 같습니다.

    public void PlayAgain()
    {
        SceneManager.LoadScene("Play");
    }

 

간단하죠?

PlayAgain함수가 실행되면, 씬매니저의 로드씬이라는 명령어에서 'Play'라는 이름의 씬을 불러들이는 것입니다.

이렇듯 SceneManager 명령어를 실행시키기 위해선 스크립트 최상단에 네임스페이스에서 SceneManagement를 불러올 필요가 있어요.

using UnityEngine.SceneManagement;

 

이렇게 SceneManagement 네임스페이스를 사용하겠다는 선언을 하고, PlayAgain에서 SceneManagement의 명령어를 사용한다는 개념이죠.

이렇게 수정함으로서 모든 스크립트 작업은 마쳤고, 엔진에서 버튼을 추가하는 작업을 해야 합니다.

해당 작업을 위해 비활성화시켜 두었던 Gameover Panel을 다시 활성화시켜 줍시다.

그리고, Gameover PanelButton 컴포넌트를 추가할게요.

Add Component에서 Button을 검색해서 추가합니다.

버튼 컴포넌트가 추가된 모습입니다.

우리는 여기서 가장 아래의 On Click() 라고 되어있는 부분을 사용할 거에요.

List is Empty. 리스트가 비어있다는 메시지가 있는데, 우측 하단의 + 버튼을 눌러줍니다.

버튼이 클릭되면 어떤 일이 일어날지를 추가하는 것입니다.

+ 버튼을 누르면 아래와 같이 슬롯이 생성되는데, 여기에서 None (Object)라고 되어있는 곳에 GameManager를 드래그 & 드롭으로 가져다 넣습니다.

None (Object)에다가 GamaManager를 가져다가 끌어넣으면...

이렇게 오브젝트가 추가되는데, 여기서 No Funtion을 클릭하여 실행시킬 함수를 찾아넣으면 됩니다.

드롭다운버튼을 눌러서 GameManager에서 아까 추가했던 함수인 PlayAgain을 선택하기만 하면 되는 거죠.

이렇게 모든 작업이 완료되었습니다.

말하자면 '버튼이 눌려지면 GameManager안의 PlayAgain 함수를 실행시켜.'라는 의미인 거죠.

 

이제 다 끝났습니다.

Gameover Panel을 다시 비활성화시킨 뒤, 테스트 플레이를 진행해 볼게요.

 

죽은 뒤 재시작!

정상적으로 진행되는 것을 확인할 수 있습니다.

 

이렇게, 이번 포스팅에서 Game Over 화면과 게임 재시작까지 구현 완료되었네요.

게임의 완성이 어느덧 코 앞으로 다가왔습니다..!

 

 

<다음 편에 계속>

반응형

'도전! N잡러! > 도전! 게임 개발!' 카테고리의 다른 글

TAP FLOAT 개발 일기를 맺으며.  (75) 2023.10.16
TAP FLOAT 개발 일기 #15  (93) 2023.10.12
TAP FLOAT 개발 일기 #13  (100) 2023.10.05
TAP FLOAT 개발 일기 #12  (109) 2023.10.04
TAP FLOAT 개발 일기 #11  (120) 2023.09.26

댓글