0. 클린 코딩 개념의 이해
저번 학기(23-2)에 학교 수업의 프로젝트로 VR 탈출 게임을 개발했었다. 사실 게임을 개발했다고 하기엔 껄끄러운 것이 빌드에도 실패했었고, 학교에서 대여받은 VR 기기(Oculus Meta Quest2)를 반납해서 내가 다시 해볼 수도, 개발을 이어나갈 수도 없다.
그래도 나름 보여지기에 괜찮은 결과물을 뽑은 것 같은데, 사실 그 속은 엉망진창 꼬여있다. 당시 SOLID, 디자인 패턴과 같은 클린 코딩에 대한 개념도 없었고, 단지 강의 교수님이 준비한 자료의 예시를 보고 일반성, 재사용성 등 좋은 코드의 요소에 대한 어렴풋한 감은 느꼈으나, 이조차 마감 기한이 다가오자 신경쓰지 못하고 그저 나오는 결과물에만 집중해 코드를 마구잡이로 추가시켰다.
해당 학기가 끝나고 새 프로젝트를 시작하며 학기 중에 느꼈던 좋은 코드의 감을 적용해보려고 했다. 하지만 프로젝트를 진행하던 중 어느 순간부터 무언가가 꼬이게 됐고, 그것이 왜 문제인지, 어떻게 해결해야 하는지에 대한 지식이 없어 찝찝함이 계속 커져갔다. 그 찝찝함이 한계에 도달하자 프로젝트를 잠시 중단하고 다른 사람들은 깔끔한 코딩을 위해 어떻게 하는 지 찾아보았다. 그러던 중 디자인 패턴의 존재를 알게 되었고, 유니티에서 제공하는 관련 전자책 강의를 통해 이에 대해 공부하는 시간을 가졌다.
공부하면서 알게 된 SOLID 원칙이나 디자인 패턴들은 정말 신세계였다. 내가 느꼈던 찝찝함이 해소되는 기분이었으며, 이것들을 정립한 사람들의 천재성에 감탄까지 나왔다. 나는 이것들을 하루빨리 게임 개발에 적용하고 싶었고, 중단한 프로젝트를 이어가기 보단 처음부터 다시 클린 코딩으로 새로운 게임을 만들어나가고 싶었다.
1. 학기 시작과 프로젝트
이번 학기(24-1)가 졸업 학기인지라 가벼운 과목들을 들으며 혼자 따로 게임을 만들 생각이었다. 그런데 운이 좋게도 수업 이름만 보고 신청한 '놀이와게임설계스튜디오'라는 수업에서 기존에는 자기만의 보드게임을 만드는 것을 텀 프로젝트로 해왔으나, 이번 학기는 유니티로 모바일 게임을 만드는 것으로 텀 프로젝트를 진행한다고 한다. 따라서 이번 학기는 교수님의 지도를 따라가면서 이전에 공부한 개념들을 적용해가며 프로젝트를 진행하기로 하였다.
수업 진도 상 프로젝트는 중간고사가 끝나고 학기 절반이 지나고서야 시작되어 그 전에는 보던 유니티 전자책을 끝까지 보고 uml에 대해 공부하는 시간을 가졌다.
2. 주제 선정
중간고사가 끝나고 첫 주에 게임을 전반적으로 설계하는 시간을 가졌다. 수업에서의 프로젝트 제출 및 발표까지 한달이 조금 넘는 시간밖에 안 남았기에 이를 고려하여 규모가 작은 게임을 개발하고자 하였고, 그 중 이전의 플레이가 다음 플레이에 영향을 전혀 주지 않는, 그저 스코어를 기록하는 게임을 만드는 것이 좋겠다고 생각하였다.
그렇게 생각한 것이 디펜스 장르이다. 다만 기존의 타워 디펜스나 라인 디펜스와는 차별화된 류의 방식을 도입하고 싶었고, 이를 위해 고민하던 중 최근에 재밌게 했던 림월드(RimWorld)라는 게임의 디펜스 요소가 떠올랐다.
림월드는 기본적으로 주어진 림(유닛)들에게 명령을 내리며 림들을 생존시키고 발전시켜 최종적으로 우주선을 만들어 탈출시키는 게임인데, 게임 도중 다른 지역의 림들이나 로봇들이 습격해오기도 한다. 따라서 생존을 위해 방어 진형을 잘 구축해놓는 것이 중요한데, 이것을 유저들은 킬존(Kill zone)을 설계한다고 표현한다.
위의 킬존을 보면, 한쪽 길을 일부러 뚫어놔 적을 좁은 길목으로 유도하고, 적은 좁은 길을 지나며 덫을 계속 밟게 된다. 좁은 길을 통과할 때까지 살아남은 적은 넓은 공간에 들어오게 되는데, 들어오는 순간 배치된 포탑들의 폭격 세례를 받는다.
나에겐 이렇게 적의 행동을 계산하며 킬존을 설계하는 것이 가장 재밌는 요소 중 하나였다. 클래시 오브 클랜에서도 마찬가지로 마을의 배치가 적의 공격을 막는데에 큰 영향을 끼치며, 많은 사람들이 효율적인 배치나 자신만의 배치를 구성해 공유하는 등 배치 요소에 재미를 느낀다.
이렇듯 자유도 높게 방어 진형을 설계하는 요소를 넣고자 했다. 웨이브 방식으로 웨이브 이전에 방어 진형을 설계하고, 웨이브 중 얻은 코인으로 다시 웨이브가 끝나면 방어 진형을 업그레이드 및 설계하는 방식을 고안했다. 우선 방어 진형을 설계하는 그 자체의 재미와, 이전보다 높은 스코어를 기록하기 위해 어떤 다른 설계를 할 것인지 고민하는 데 재미를 느끼는 것을 의도했다. 이러한 방식의 디펜스 게임들이 이미 존재하긴 하지만, 특히 모바일에서는 많이 없는 것 같아 괜찮은 방식이라 생각했다.
3. 게임 방식 설정
수업에서 게임에서 핵심적이라고 생각되는 부분이 어떻게 보여질 것인지 디지털 뷰를 한번 만들어오라고 하여 다음과 같이 만들어보았다.
유니티에서 제공하는 기본 도형들로 웨이브 중을 상정한 대략적인 플레이 화면을 구성해보았는데, 이와 함께 고안한 게임 방식을 설명해보자면 다음과 같다.
먼저 초기에 주어진 돈으로 아래 슬롯에서 벽, 타워, 함정, 유닛 등을 선택하고 배치하여 방어진을 설계할 수 있다. 준비가 끝나고 시작 버튼을 누르면 웨이브가 시작되며, 적들이 위에서 나타나 성벽을 향해 움직인다. 이때 웨이브 중에도 돈을 소비하여 유닛을 출동시켜 여러 상황에 대처할 수 있다. 적들은 성벽에 도달하면 성벽을 공격하고, 성벽의 HP가 0이 되면 게임이 종료된다. 그 전에 모든 적을 섬멸하면 다시 방어진을 설계 및 업그레이드하여 웨이브를 이어나갈 수 있다.
이미 이 글을 적는 시점은 게임을 어느 정도 만들고 수업에서 발표까지 마친 이후인데, 글이 너무 길어져 게임에 관한 자세한 설명은 다음 글에서 이어가보려고 한다.
'Unity > 개발일지' 카테고리의 다른 글
[모바일 디펜스 게임] #1. 버전 0 제작 (0) | 2024.06.13 |
---|