오늘은 Unity 개인 프로젝트를 계속 진행했다. The Stack 미니게임을 추가로 만들어 넣어봤는데, 주요 기능들과 문제, 해결 과정을 정리해보았다.
TheStack.Update() 메서드 내에서 블록을 놓는 PlaceBlock() 호출 이후, 게임매니저 내에 있는 S_AddScore(1) 메서드를 호출하도록 변경했다.S_AddScore(int score) 메서드에서는 현재점수와 현재콤보를 증가시키도록 하였다. 이후 S_UIManager의 각 메서드를 호출했다.S_CheckBestScore() 및 S_CheckBestCombo()메서드를 호출하여 최고 점수/콤보를 확인하도록 했다.PlayerPrefs에 저장하도록 구현했다.S_GameManager는 게임 데이터와 핵심 로직을 관리하고, S_UIManager는 UI만, TheStack은 블록의 움직임 등만 관리하도록 역할을 분리하려고 노력해보았다.TheStack에서 직접 점수를 계산하는 것이 강의에도 나와있고 구현하기 편리할 것이라 생각했지만, 역할을 분리함으로써 유지,보수 및 확장에 유리할 것이라 생각했다.The Stack과 FlappyBird 미니게임을 구현한 후 임시로 완성된 게임을 플레이해보는 상황이었다.
임시로 완성된 게임을 플레이해보았는데, The Stack과 FlappyBird게임이 최고 점수를 저장하기 위해 BestScore라는 동일한 PlayerPrefs 키 이름을 사용하고 있었다.
FlappyBird게임을 플레이했을 때의 최고기록이 The Stack의 UI에서 표시되는 오류가 발생했다.각 게임마다 고유한 키 이름을 정의하여 PlayerPrefs데이터가 서로 간섭하지 않도록 분리하였다.
The Stack: S_BestScoreKey = "S_BestScore"Flappy Bird: F_BestScoreKey = "F_BestScore"현재는 씬별로 이름을 다르게 지정해서 사용하고 있지만, 앞으로 진행하면서 미니 게임이 더 추가될 경우 키 관리가 복잡해질 수 있다는 단점이 존재했다.
다음에 프로젝트를 진행할 때는 네임스페이스를 적용하여 각 게임의 PlayerPrefs 키가 서로 간섭하지 않도록 관리할 생각이다.
SceneLoader.Instance.LoadTheStackScene() 메서드를 호출하여 현재 씬을 새로 로드하는 방식으로 게임을 초기화하고 있다.Time.timeScale = 0f를 통해 게임 상태를 관리하는 대신 isPlaying 불리언 변수 등을 통해 게임 상태를 관리하는 것이 훨씬 효율적일 것이라 생각했다.TopDownShooting 게임을 조금 발전시킨 메인 게임을 만들어보기로 결정했다.TopDownShooting에서 사용할 무기를 사거나 강화하고, 능력치를 강화시키는 방식으로 발전시킬 생각이다.TopDownShooting에서 얻은 점수를 통해 치장 아이템 등을 해금하고 얻을 수 있도록 구현해 볼 예정이다.TheStack.cs 안에서 점수/콤보 로직을 처리하려고 했는데, C# 팀 프로젝트를 진행할 때의 경험상 블록 동작 로직과 점수 관리 로직이 뒤섞이면 확장이 힘들 것이라 예상하여 게임매니저를 따로 생성하기로 했따.