프로젝트 완료 후 코드 리뷰

게임 기획

기획의도

  • 유저의 입장에서 생각하여 유저가 이 게임을 왜 플레이 해야하는거지? 에서 시작
  • 컨텐츠에 대한 확정서 및 플레이 경험을 생각하여 탄막 회피 게임인 닷지게임을 제작 결정

시장조사

  • 시장조사 결과 컨텐츠 자체는 크게 다를 것이 없지만, 케릭터성으로 컨셉을 잡은 게임이 많다고 판단하였으며, 사용할 플레이어나 에셋들도 Cartoon 타입으로 사용하기로 결정

게임 컨셉

  • 베이직 스탠다드 클래스의 유저가 챌린지 클래스를 가기 위해서는 우리를 넘어서라 라는 컨셉의 탄막 슈팅 게임 개발

협업

Git Workflow

  • 버전관리 VCS Forking Workflow 방식을 적용하여 레포지토리를 분리
  • Upstream에 PR 시에는 Code Review 및 Conflict 체크를 통해 안전하게 관리

오브젝트 프리팹화

  • 씬을 로드하는 오브젝트를 제외한 모든 오브젝트는 실행시에 인스턴스화
  • 해당 방법으로 Conflict 최소화

프로덕트 설계

객체 지향

  • 디커플링, 상속등을 적극 활용하여, 게임 구조를 설계

리소스 관리

  • Addressable Asset을 활용하여 Label을 이용한 로드 방식으로 ResourceManager에서 모든 리소스를 관리합니다.
  • Addressable은 프로젝트의 규모가 작다면 리소스를 그룹화 하는 부분이 쉽고 빠르게 가능하지만, 프로젝트 규모가 커진다면 문제가 발생할 수도 있다고 생각합니다.
  • 그리고 게임의 경우 해당 씬에서만 필요한 부분에 대한 리소스를 로드 해야하는데, 지금은 Preload라는 라벨로 전부 미리 로드하는 방식을 사용하는 문제가 있습니다.
  • 다음 프로젝트에서는 필요한 부분만 로드 할 수 있도록 할 예정입니다.

Object Pooling

  • Unity에서 Assemble로 제공하는 Pool System을 활용
  • 별도의 Generic Method로 매핑하여, 모든 오브젝트에 대해 의도에 맞추어 풀링이 가능하도록 설계
  • 다만, Preload시에 풀링이 진행되는 것이 아닌 실시간 풀링이 진행되어 다음 프로젝트에서는 사전 Pooling을 진행하도록 하려고 합니다.

Binding System

  • UI 제작에 Binding 시스템을 사용
  • 직접적인 직렬화 방법이나 불필요한 연결을 끊고 인스펙터 작업을 최소화 합니다.
  • 바인딩된 Type을 기반으로 오브젝트를 관리 합니다.


마치며

이번 프로젝트를 진행하면서 분명히 Learning Curve가 존재하는 코드와 패턴이지만, 실제 경험을 하였든 베이스 코드를 작성하는데 80% 걸렸다면 실제 게임 로직을 구현하는 비율은 20% 정도로, 베이스 작성만 익숙해 진다면 정말 빨르고 쉽게 테스트 게임을 제작하고, 프로덕트 개발도 가능할 것으로 보입니다.

익숙한것이 빠를 수도 있지만, 오히려 익숙하지 않은 것이 빠를 수도 있다는 것을 알았습니다.

특히, 개발자는 항상 새로운 것에 대해 알아보고 적용하고 시도해보는 경험을 가지는 것이 중요하다고 깨달은 좋은 기회가 되었습니다.