약 한 달가량의 42게임개발 챌린지가 종료되었다.
프로젝트를 진행하며 배우고 느낀 것들을 하나씩 정리해보았다.
기획 발표날 초청된 멘토님께서 42게임개발 챌린지에 참여한 두 팀에 대해 여러 조언을 해주셨다.
온라인 웹개임을 기획한 팀에게는 이러한 같은 조언을 해주셨다.
2D 로그라이크 게임을 기획한 우리 팀에게는 이러한 조언을 해주셨다.
프로젝트를 계속 진행하면서 멘토님의 조언을 온몸으로 느낄 수 있었다.
매우 방대한 기획을 가졌던 우리 팀은 멘토님께 빠른 개발에 대한 여러 피드백을 받았다. 그 중에 가장 기억에 남는 것이 코드의 구심점이다
우리 게임은 구현해야 할 부분이 너무나 많았다.
너무나 방대한 기획량에 모든 팀원들은 어디서부터 감을 잡아야 할 지 가늠을 할 수 없었고, 결국 각각이 스탯, 스킬, 장비 등 하나의 파트씩 맡아서 구현하기로 하였다.
구현이 진행되면서 뼈대는 한 명이 도맡아야 한다는 멘토님의 조언이 뼈저리게 느껴졌다. 시간이 지날수록 서로의 코드를 이해하기 힘들어지면서 협업에 차질이 생기기 시작했다. 초반에는 피그마에 작성한 다이어그램이나 풀 리퀘스트 설명을 작성해 팀원에게 자신의 코드를 설명할 수 있었지만, 점점 해이해지면서 각자가 각자의 코드에 고립되었다.
그러다 보니 나중에 서로의 코드를 맞춰볼 때 한바탕 전쟁이 벌어졌다. 서로의 코드가 어떠한 목적을 가지고 작성되었는지 모르고 사용하다보니 버그가 난무하였고 수정 작업만으로 하루를 꼬박 까먹었다.
누군가 주도를 하든, 아니면 각자 남에게 잘 설명하든 최소한 퍼블릭 함수라도 서로가 잘 이해하고 있으면 이렇게까지 복잡하게 얽히지는 않았을 것 같다고 생각한다. 그 부분이 너무 아쉽다.
게임은 플레이어가 재미있기 위해 하는 것이다. 플레이어가 재미를 느끼기 위해 가장 먼저 해야 하는 것은 무엇일까 고민한 적이 있었다. 그 때 나는 게임 기획의 어느 한 부분이라도 포기하면 게임의 재미가 온전히 느껴지지 않을 것이라는 결론에 도달하여 모든 부분을 만족할 만큼 개발해야 된다고 생각했다.
이번 프로젝트에서 나는 액터의 이동, 공격, 상태 애니메이션 등 눈에 보이는 작업 위주로 구현했다. 놀라운 건 나는 스킬이나 버프와 같은 복잡한 구조의 구현에 대해 크게 관여하지 않았지만 단순히 캐릭터의 움직임이나 상태 등을 보면서 어떻게 도입이 되어야 하는지 느껴진다는 것이었다. 아무래도 테스트를 하면서 개발자의 입장이 아닌 플레이어의 입장이 되어본 것이 크게 작용한 듯 싶다.
느낀 점을 바탕으로 팀원들에게 플레이어에 추가로 붙는 컴포넌트들의 개발 방향을 제의했지만 결과적으로 영향력 있게 받아지지 않았다. 각자의 생각과 방향이 있었고, 이미 작성 중인 코드를 변경하는 위험성을 팀원들은 겪고 싶지 않았던 모양이었다. 이 때 구심점을 제대로 잡지 못한 것에 대한 아쉬움이 또다시 들었다.
이 프로젝트를 시작하기 이전에는 디자인 패턴에 대해 잘 몰랐다. 기사시험 공부를 하면서 디자인 패턴이 있다는 것은 알았지만 이들의 사용 이유와 사용 방법 등에 대해 깊게 공부하지 않았었다.
그러다 팀원의 조언으로 플레이어의 움직임을 처리할 때 상태 패턴을 사용해보니 편의성과 효율이 이루 말할 수 없을 정도로 높았다.
디자인 패턴의 맛을 느낀 이후로는 GoF에서, 혹은 이후에 제시된 여러 디자인 패턴의 구현 의도, 사용처, 구현 예시들을 공부하여 블로그에 정리하고 있다.
기존에 사용한 정적인 인풋 매니저를 타파하여 인풋 시스템을 사용해보았다. 이를 바탕으로 멀티플랫폼 확장에 대한 유연성을 확보할 수 있었다.
공부한 내용은 블로그에 정리해 두었다.