방치형 클리커 개발 후기

정선호·2023년 10월 28일
0

일지 및 후기

목록 보기
3/4

'고양이와 스프'와 유사한 시스템의 방치형 클리커 게임의 기본 베이스를 구현하였다.
여러 다양한 기술과 패턴을 이용해 '10년 후에 처음 소스코드를 만지는 사람도 곧바로 개발에 착수할 수 있게' 스크립트를 작성하는 것을 목표로 하였다.


새로 학습한 부분

유니티 메모리팩

기술 벨로그

유니티의 기본 직렬화 시스템인 JsonUtility가 딕셔너리를 지원하지 않아 외부 라이브러리를 찾던 도중 가장 빠른 속도로 직렬/역직렬화 한다는 설명에 사용하게 되었다.
다른 일반적인 직렬화 패키지와 다르게 꽤 복잡하고 형식적인 사용 방법을 요구하지만, 이를 계기로 데이터를 세분화하여 정리하는 구상을 하면서 후술할 모듈 시스템을 구상하였다.

Unity UI

기술 벨로그

기존에 만들던 일회용적이고, 확장 가능성을 포기한 UI들이 아닌, 재사용 가능하고, 유연하게 콘텐츠를 추가할 수 있는 UI를 만들기 위하여 공부했다.
UI를 모듈화하는 방법, 자주 사용하는 UI 엘리먼트들의 제작 방법 등을 공부하였고, 이를 바탕으로 기능-UI 연동을 수월하게 구현할 수 있었다.

모바일 인풋 시스템

기술 벨로그

주 타깃 플랫폼이 모바일이기 때문에 모바일에서 사용하는 주 입력 방식인 터치, 스와이프, 핀치 등의 구현 방식을 공부하였다.
이를 공부하면서 기존 인풋시스템을 재해석하여 후술할 상태 패턴 인풋 시스템을 구현하였다.


직접 개발한 부분

새로 학습한 부분 등을 바탕으로 직접 고안하여 개발한 부분

팝업 UI

기술 벨로그

여러 창 UI들을 스택처럼 관리하여 순서대로 활성화 및 비활성화 시켜주는 간단한 시스템이다.
간단하게 스택 형식으로 구현하여 가장 마지막에 오픈한 UI만 화면에 표시되도록 구현하였다.

상태 패턴을 적용한 유니티 인풋 시스템

기술 벨로그

유니티의 인풋 시스템이 이벤트 구독 방식인 것을 이용하여 상태 패턴을 적용해 터치한 입력 상황에 따라 다른 상태의 로직이 수행되게끔 수행한 시스템이다.
해당 시스템을 고안함으로써 터치패드에 입력한 손가락 개수에 따른 행동 처리 등 다양한 방식의 입력 상황에 유연하게 대처할 수 있었다.

육각형 그리드 컨트롤

기술 벨로그

건물을 세울 위치를 잡기 위해 고안한 시스템으로 건물의 간격과 외곽 범위를 지정하여 조건에 부합하는 위치인지를 판별해주는 기능을 수행한다.

기능 모듈화 시스템

기술 벨로그

다양한 종류의 기능을 수행하면서 동시에 공통된 기능을 가지는 건물들을 위해 고안한 시스템으로 위의 메모리팩을 구현하기 위해 데이터 구조체를 작성하면서 구상하였다.
정보 표시, 건물 레벨업 등과 같이 모든 오브젝트가 공용으로 갖는 기능이 있으면서, 재화 생산이나 버프 강화, 특수 이벤트 출현 등 한 종류의 오브젝트가 갖는 기능들이 있는 오브젝트 종류들을 위해 모든 기능들을 모듈화 하여 오브젝트에 추가하는 방식을 고안하였다.


좋았던 부분

디자인 패턴 활용

이전까지 공부했던 여러 디자인 패턴을 활용하고, 이를 응용하여 나만의 시스템을 개발한 부분이 가장 만족스러웠다.

문서화

타인이 알아보고 이해하기 쉬운 스크립트 외적으로, 타인이 빠르게 자료를 찾을 수 있도록 문서를 작성하기 위해 다방면으로 노력했다.
크게 3가지 방식으로 코드를 문서화하였다.

  1. 꼼꼼한 주석
    클래스와 클래스 내 각각의 변수와 함수의 기능들을 주석으로 작성하였다.
    이를 이용해 IDE 내에서 해당 변수와 함수를 외부에서 호출할 때 사용 방식 등을 알려줄 수 있게 하였다.

  2. 시스템 기획 문서
    다양한 기능들을 파악하기 위한 기획문서를 작성하였다.

  3. 개발일지 작성
    매일매일 그날의 개발에 대한 의도 등을 포함한 일지를 작성하였다.


아쉬웠던 부분

프로토타입에서 중단된 개발

프로토타입 겸 베이스 시스템 개발 단계에서 프로젝트가 엎어져 서버 연동, 그래픽 적용 등 본 개발과 게임 폴리싱을 수행하지 못 한 것이 가장 아쉬웠다. 또한 개발 파트를 혼자 수행해 팀 개발을 못 한 것이 아쉬웠다.

파편화된 데이터

모듈화 시스템을 구현하면서 각 모듈에 대한 데이터를 각각의 파일로 파편화하여 저장하였다. 이렇게 파편화되고 세분화된 데이터는 로컬의 저장 및 불러오기에서는 강점을 보이지만, 서버, 특히 Json을 주로 사용하는 웹서버에 데이터를 전송하고 받는 상황에서는 추가적인 기능을 수행해야 한다.
플레이어 데이터라는 큰 틀 아래에 오브젝트 데이터를 추가하고, 그 오브젝트 데이터 모듈 데이터를 추가하는 등의 적층식 구조를 차용했으면 좀 더 괜찮았을 것 같다.


느낀 점

입사 후 처음으로 수행한 프로젝트였다.
내가 공부한 것들을 정리하고 응용할 수 있는 좋은 기회였다고 생각한다.
추후에 내가 개발한 게임을 실제로 출시까지 시켜보고 싶다.

profile
학습한 내용을 빠르게 다시 찾기 위한 저장소

0개의 댓글