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

TAP FLOAT 개발 일기 #15

by NAWE 2023. 10. 12.
반응형

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

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 바로가기 ◀

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

 

그럼, 시작합니다!


TAP FLOAT의 개발이 막바지에 이르렀습니다.

지금까지 우리는 게임의 코어 플레이를 개발하고, 방해요소를 구현해 내고, 점수 체계를 완성시켰고, 게임의 종료 화면과 재시작 기능까지 붙였습니다.

타이틀 화면과 같은 부가적인 것들은 차치하고서라도, 게임의 완성을 선언하기 위해서는 마지막 조각 하나가 남았습니다.

그것은 바로, 최고 기록을 저장하는 기능입니다...!

 

오호오오

게임 종료 화면에 BEST SCORE라고 적어놓은 부분이 있었습니다.

게임을 진행하며 최고 점수를 따로 저장한 뒤, BEST SCORE에다가 보여주려고 만들어 두었었죠.

그리고 유니티에서는 PlayerPrefs 라는 이름으로 내가 저장해두고 싶은 기록을 따로 저장시켜두는 기능이 존재했습니다.

 

그래서 저는 PlayerPrefs를 이용, 최고 기록을 저장해두었다가 게임 종료 화면에서 계속 보여줄 수 있도록 할 것이고...

거기다 새로운 최고 기록이 달성될 경우에는 기존의 기록에서 새로운 기록으로 갱신시켜줄 수 있도록 할 거에요!

 

코드 작성은 기존에 만들어 두었던 GameManager에 추가하여 작성하였습니다.

우선, Awake 함수 안에다가 bestScore 변수에 값을 할당하는 코드를 추가할게요.

 

    void Awake()
    {
        if(instance == null)
        {
            instance = this;
        }

        bestScore = PlayerPrefs.GetFloat("BestScore", 0);
    }

기존 Awake 함수 안에는 싱글톤을 위한 인스턴스를 할당하는 코드만 존재하고 있었는데, 새로운 한 줄이 추가되었습니다.

PlayerPrefs안의 GetFloat라는 기능을 사용하였어요.

GetFloat는 float 자료형으로 저장된 값을 가져와주는 명령어입니다.

 

이 명령어에서 우리는 기존에 "BestScore"라는 이름으로 저장된 값을 가져오라고, 만약 기존에 저장된 값이 없을 경우에는 0값을 가져오도록 명령했습니다.

처음 게임을 시작했을 때에는 0값으로 보여지는게 맞기 때문에 그렇게 작업했어요.

 

Awake 함수 안에 추가한 저 명령어로 인해, 게임이 시작되는 시점에 bestScore 변수에 저장된 최고 기록을 불러오는 코드는 완성되었습니다.

이제, 게임 종료 시점에 달성한 점수가 기존의 최고 점수보다 높을 시, 값을 갱신해주는 코드를 만들어야 할 차례에요.

마찬가지로 GameManager 스크립트 안에 새로운 함수를 작성하였습니다.

함수의 이름은 UpdateBestScore로 명명했어요.

    public void UpdateBestScore()
    {
        if (point > bestScore)
        {
            bestScore = point;
            PlayerPrefs.SetFloat("BestScore", bestScore);
        }
    }

이 함수에 기제된 내용을 해석하자면, 대략 이런 내용입니다.

 

 

"만약 point(이번 판 점수)가 bestScore보다 높으면 말이야..."

 

"point 값을 bestScore에 덮어씌워줘."

 

"그리고 PlayerPrefs의 SetFloat 명령어를 써서 BestScore라는 이름으로 bestScore를 저장해줘."

 

 

아까전에는 GetFloat를 사용했는데, 이번에는 SetFloat를 사용하고 있네요.

Set으로 이름과 값을 저장하면, Get으로 불러오는 모습을 띄고 있습니다.

 

이렇게 최고 점수를 기록 / 갱신하는 함수를 완성했으니, 이 함수를 기존에 만들어 두었던 코드에다가 추가해서 실행시켜줘야 겠어요.

 

저는 게임이 종료되었을 때 실행되는 SetGameOver 함수에다가 UpdaetBestScore 함수를 실행시키도록 코드를 작성했습니다.

바로 이렇게요.

    public void SetGameOver()
    {
        isGameOver = true;
        
        Spawner spawner = FindObjectOfType<Spawner>();
        if(spawner != null)
        {
            spawner.StopEnemyRoutine();
        }

        Invoke("ShowGameOverPanel", 0.4f);
        UpdateBestScore();
    }

기존 SetGameOver 함수는 isGameOver 함수의 상태를 true. 즉, '참'으로 변경시키고 Spawner의 활동을 멈추게 했었습니다.

그런 뒤 ShowGameOverPanel 함수를 실행시켜서 게임오버 화면이 보여지도록 했었죠.

 

그 내용의 마지막으로 UpdateBestScore 함수를 실행시키도록 코드를 추가하였습니다.

이렇게 해 두면, 게임이 종료될 때마다 UpdateBestScore 함수가 함께 실행될 거고... 그렇게 되면 제 의도대로 BestScore가 기록 / 저장되어 표시되어질 수 있을 거에요.

 

모든 작업이 끝났으니, 마지막으로 확인해 봅시다.

 

최고 기록이 저장되고 있어요.

gif 이미지에서 보여지듯, 최고 기록이 갱신되면 BEST SCORE에 점수가 함께 갱신되어지고 있습니다.

제가 원했던 대로 모든 기능이 완료되었어요.

 

이제 남은 작업은 타이틀 화면을 만들고, 게임을 좀 더 다듬어서 예쁘게 만드는 작업 뿐인거 같습니다.

실질적인 게임의 개발은 이번 포스팅으로 모두 완료되었다고 봐도 과언이 아닐 것 같아요.

 

왕뿌듯합니다.

다음 포스팅에서는 그동안 진행했던 TAP FLOAT의 개발 일기를 마무리하는 글을 올려볼까 합니다.

항상 응원해주시고 지켜봐주셔서 감사합니다 :)

 

 

<다음 편에 계속>

반응형

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

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

댓글