Unity 20일차 - Unity 개인 프로젝트

한예준·2025년 5월 2일

오늘은 Unity 개인 프로젝트를 계속 진행했다. The Stack 미니게임을 추가로 만들어 넣어봤는데, 주요 기능들과 문제, 해결 과정을 정리해보았다.


개인 프로젝트 진행

점수/콤보 시스템

  • 강의에서 진행한 내용대로 진행하다가, GameManager를 따로 지정해서 관리하는 방식으로 바꿔보려고 했다.
  • 하지만 실제 게임 화면에 현재 점수, 최고 점수, 콤보 등이 출력되지 않았다.
    • TheStack.Update() 메서드 내에서 블록을 놓는 PlaceBlock() 호출 이후, 게임매니저 내에 있는 S_AddScore(1) 메서드를 호출하도록 변경했다.
    • S_AddScore(int score) 메서드에서는 현재점수와 현재콤보를 증가시키도록 하였다. 이후 S_UIManager의 각 메서드를 호출했다.
    • 게임 오버 또는 점수/콤보 갱신 시에는 S_CheckBestScore()S_CheckBestCombo()메서드를 호출하여 최고 점수/콤보를 확인하도록 했다.
    • 이후 이를 PlayerPrefs에 저장하도록 구현했다.
  • S_GameManager는 게임 데이터와 핵심 로직을 관리하고, S_UIManager는 UI만, TheStack은 블록의 움직임 등만 관리하도록 역할을 분리하려고 노력해보았다.
  • TheStack에서 직접 점수를 계산하는 것이 강의에도 나와있고 구현하기 편리할 것이라 생각했지만, 역할을 분리함으로써 유지,보수 및 확장에 유리할 것이라 생각했다.

PlayerPrefs 충돌

배경

The StackFlappyBird 미니게임을 구현한 후 임시로 완성된 게임을 플레이해보는 상황이었다.

발단

임시로 완성된 게임을 플레이해보았는데, The StackFlappyBird게임이 최고 점수를 저장하기 위해 BestScore라는 동일한 PlayerPrefs 키 이름을 사용하고 있었다.

  • 이로 인해 FlappyBird게임을 플레이했을 때의 최고기록이 The Stack의 UI에서 표시되는 오류가 발생했다.

전개

각 게임마다 고유한 키 이름을 정의하여 PlayerPrefs데이터가 서로 간섭하지 않도록 분리하였다.

  • The Stack: S_BestScoreKey = "S_BestScore"
  • Flappy Bird: F_BestScoreKey = "F_BestScore"

절정

현재는 씬별로 이름을 다르게 지정해서 사용하고 있지만, 앞으로 진행하면서 미니 게임이 더 추가될 경우 키 관리가 복잡해질 수 있다는 단점이 존재했다.

결말

다음에 프로젝트를 진행할 때는 네임스페이스를 적용하여 각 게임의 PlayerPrefs 키가 서로 간섭하지 않도록 관리할 생각이다.


Restart 로직

  • 현재는 게임 오버 시 버튼을 통해 SceneLoader.Instance.LoadTheStackScene() 메서드를 호출하여 현재 씬을 새로 로드하는 방식으로 게임을 초기화하고 있다.
  • 이 방식은 간편하지만, 씬 로딩 시간이 발생하여 다음 플레이까지 딜레이가 생긴다는 단점이 존재했다.
  • 또한 단순히 게임 데이터를 리셋하고 오브젝트의 위치만 재지정해주면 되는 작업에 불필요한 리소스를 사용하게 된다.
  • 따라서 앞으로는 게임 데이터를 리셋하는 방식의 스크립트를 작성할 계획이다.
  • 또한 Time.timeScale = 0f를 통해 게임 상태를 관리하는 대신 isPlaying 불리언 변수 등을 통해 게임 상태를 관리하는 것이 훨씬 효율적일 것이라 생각했다.

프로젝트 진행 계획

  • 필수 기능들은 어느정도 마무리된 듯 하니, 추가 기능들을 생각해보았다.
  • TopDownShooting 게임을 조금 발전시킨 메인 게임을 만들어보기로 결정했다.
  • 미니 게임에서 얻은 재화들을 통해 TopDownShooting에서 사용할 무기를 사거나 강화하고, 능력치를 강화시키는 방식으로 발전시킬 생각이다.
  • 또한 TopDownShooting에서 얻은 점수를 통해 치장 아이템 등을 해금하고 얻을 수 있도록 구현해 볼 예정이다.
  • 또 몇가지 숨겨진 이벤트들을 넣어볼 생각이다.

회고 및 느낀점

  • 처음에는 강의에서 배운대로 TheStack.cs 안에서 점수/콤보 로직을 처리하려고 했는데, C# 팀 프로젝트를 진행할 때의 경험상 블록 동작 로직과 점수 관리 로직이 뒤섞이면 확장이 힘들 것이라 예상하여 게임매니저를 따로 생성하기로 했따.
  • 하지만 미숙한 코딩 탓에 메서드 호출 타이밍을 잘못 잡는 등의 문제로 UI 갱신이 누락되는 등의 오류가 발생하였다.
  • 아직 많이 미숙함을 다시금 느끼게 됐고, 디버깅을 자주 하고 처음부터 구조를 잘 짜서 천천히 작업을 진행해야겠다고 다짐했다.
  • 또한 플레이하면서 발견된 버그를 고치는 과정이 예상보다 오래 걸렸다.
  • 코드를 작성할 때에도 긴가민가하면서 많이 헤맸는데, 결과에 그대로 나타나는 듯 했다.
  • 결국 어찌저찌 완성하긴 했는데, 동작만 정상적으로 될 뿐이라는 생각을 떨칠 수가 없다.
  • 마찬가지로 처음부터 설계를 잘 해서 어디서 문제가 발생한 것인지를 확실하게 인지하는 것이 중요할 것 같다.

0개의 댓글