유니티로 간단한 장갑차 슈팅 게임 만들기
들어가며
어렸을 때 어떤 유튜버(Tooner)가 구현한 탱크의 서스펜션이나 PIP(Picture-In-Picture) 스코프, 섬광탄 이펙트 등을 신선하게 보았던 기억이 있습니다. 영상 자체는 날 것 그대로 투박했고, 그래서인지 조회수도 대체로 적었지만 그 내용은 정말 흥미로웠죠.
시간이 지나고 시간이 붕 뜨려 하던 도중에 이 유튜버가 생각났습니다. 컴퓨터로 어떤 결과물을 만들어보고 싶은 마음이 들던 참에 이 유튜버의 영상을 다시 하나하나 보다 보니 저도 그런 것들을 만들어보고 싶다는 생각이 들었죠. 그래서 이 유튜버의 행적을 롤모델 삼아 2주간 블렌더와 유니티를 사용해 제 나름대로의 첫 번째 마일스톤을 만들었습니다.
블렌더
처음에 무엇을 만들까 하다가 주제를 LAV-AD라는 장갑차로 정했습니다. 단순히 이 차량이 멋있어 보이기도 했고, 차체가 기하학적인 모습을 하고 있어 직접 모델링을 하더라도 어렵지 않겠다는 생각이 들었거든요.
물론 처음에는 인터넷에서 무료 모델을 받아올까 생각도 했지만, 대부분의 모델이 유료판매중이기도 하고 평소 블렌더를 맛보고 싶다는 생각도 있었어서 직접 만들어 쓰기로 했습니다.
기초 단축키는 인터넷에서 잘 정리된 글을 찾아 참고했고, 블렌더라는 툴 자체에 어떤 느낌으로 접근하면 되는지는 유튜브 해외 채널에서 스피드모델링 영상을 여러 개 찾아보며 따라했습니다.
보다보니 X, Y, Z 3개 축에 대한 정사영 이미지를 참고해 만드는 경우가 많이 보이더라구요. 저도 구글로 관련 자료를 모으기 시작했고 저의 첫 모델을 만들기 시작했습니다. 어려움은 있었지만 과정이 꽤 체계화되어있어 금방 적응할 수 있었어요. 만들다보니 제 나름대로 느낌이 나는 모양을 만들 수 있었습니다.
유니티
다음은 코딩이었는데, 이 역시도 평소 배워보고 싶었던 유니티를 이용했습니다. 돌이켜보면 유니티는 특히 뭘 어떻게 써야 하는지 몰라서 돌다리를 두들기는 심정으로 겨우겨우 만들었던 것 같네요.
객체지향이나 컴포넌트 기반 설계 등 기반 지식이 전무해서 국내 블로그 포스팅은 물론이고 인도계 유튜버 강의나 오래된 스택오버플로우 문답 글 등을 참고하며 만들었습니다.
특히 도중에 바퀴를 구현하면서 휠 콜라이더(Wheel Collider)라는 유니티 컴포넌트를 사용했는데, 이게 아무리 찾아봐도 국내에 관련 자료가 너무 없었습니다. 처음으로 유니티 공식 문서를 참고해봤지만 컴포넌트 자체에 대한 이해가 부족해 제대로 쓰기까지 시간이 좀 걸렸어요.
그래도 결국에 잘 적용해서 바퀴가 잘 굴러가는 모습을 보니까 감회가 너무 새로웠고, 이때를 기점으로 유니티에 재미가 붙었던 것 같습니다.
버그 수정과 완성
이런 웃긴 버그도 많았습니다. 휠 콜라이더의 존재를 모를 때 차체 움직임을 삼각함수로 구현하려다 완전 엉터리로 작동한다던가, 휠 콜라이더를 적용하고 나서도 바퀴의 축이 엇나가 굴러가면 안 되는 방향으로 굴러간다던가, 새로 모델링한 차체를 적용하니 질량값이 말썽을 일으킨다던가, 탄피배출 이펙트를 구현하던 도중에 탄피를 너무 많이 쏟아낸다던가 하는 등 말이죠.
이외에도 많은 버그와 함께 세미콜론이나 괄호의 누락 등 기본적인 문법 오류도 자주 일어나면서 생각보다 자잘한 어려움이 많아 당황하기도 했습니다. 특히 휠 콜라이더를 적용할 때 즈음부터는 너무 힘들었네요.
그래도 총 9차례 빌드를 거쳐 자가만족할만한 수준까지 만들었습니다. 여러가지 개인적인 기호나 바램도 들어가서, 카메라 포스트 프로세싱을 적용해 심도 효과를 구현하고 전진이나 후진시 뒷바퀴에서 방향에 맞게 흙먼지가 날리고 특히 후진시에는 후미등이 강하게 점등되는 등 세부 디테일을 구현하면서 재밌게 마무리했어요.
마치며
깃허브에서 다운받아 플레이해볼 수 있습니다.
7월 8일에 시작해 7월 25일에 마지막 빌드를 거쳤으니 17일동안 완성한 단기 프로젝트입니다. 개인적으로는 마지막 빌드를 만들면서 다음에는 보다 큰 규모의 프로젝트를 진행해보고 싶다는 생각을 했습니다. 특히 C#에 대한 이해가 부족한 상태로 목표달성에만 급급한 코드를 남발한 것 같다는 아쉬움이 있기도 하고요.
그래도 직접 모델링을 해보거나 객체지향을 사용해볼 수 있어서 좋았습니다. 무엇보다 제가 애착을 갖고 프로그램을 만들어보았다는 것이 마음에 드네요.