래토피아 개발일지 #3 - 건조물과 길찾기

Cassel
2022-06-01
조회수 422


안녕하세요! <래토피아>를 개발 중인 카셀입니다.

이번에 PlayX4와 인디크래프트에 참가해서 첫 공개 시연을 가졌는데요,

부족한 게임임에도 방문해 주시고, 플레이해 주신 모든 분들께 다시 한번 감사 말씀 드립니다.

응원과 기대에 부응하는 게임이 될 수 있도록 노력하겠습니다!


그럼 이번 화에서는 <래토피아> 건조물의 디자인 정립과 시민의 길찾기 시스템이 만들어진 과정에 대해 소개하도록 하겠습니다.




건조물 디자인

건조물에 대한 컨셉 디자인은 캐릭터와 타일 그래픽이 완벽히 정해지기 전에 시작하였습니다.

처음에는 어떤 건조물이 추가되어야 될지 정하지 못해,

사다리와 벽 같은 간단한 건조물부터 차근차근 디자인을 시작해 나아갔습니다.

2.5D로 원근감을 넣어보기도 하고, 광원 효과를 넣어 보기도 하면서 여러 디자인들을 시도해 보았죠.


<래트로폴리스>의 집 건물을 응용한 컨셉 아트


다양한 시도를 하다 보니 캐릭터, 건조물, 타일의 그래픽 스타일이 좀 안 어우러진다는 느낌을 받았고,

게임 내 건조물들과 타일들을 시민과 같은 카툰풍 그래픽으로 통일시키기로 결정하였습니다.


그러나 사다리와 벽만으로 건조물에 대한 양상을 그리기에는 부족하여,

좀 더 건물스러운 주거지와 농장과 같은 일터를 디자인해 보기로 하였는데요.

<래토피아>에서는 여러 건물들이 소유자의 경제력에 따라 변화하게끔 만들 계획이었기 때문에,

추후에 건물이 변화될 것을 사전에 고려해서 디자인하기로 하였습니다.


<파라오>의 주거지 등급 시스템


이번에는 어떤 부분이 변하게 될지 확실하게 규칙을 정하여 개발하고자 하였는데요.

<래트로폴리스> 개발 당시 건물의 단계별 모습을 사전에 고려하지 않은 채로 개발하다가,

건물 증축 시스템을 추가하게 되자 몇몇 건물들을 처음부터 다시 그리는 곤란을 겪어봤기 때문이었죠.


그러나 확실한 규칙을 정해 가는 과정은 결코 호락호락하지 않았습니다.

건물의 높이 제한이 없어 위로 증축이 가능한 여러 시뮬레이션 게임들과는 달리,

<래토피아>의 2D 건물들은 정해진 규격 내에서 차별점을 줘야만 했습니다.

게다가 건물과 시민들이 상호작용하는 애니메이션도 추가할 계획이었기에,

상호작용이 일어나는 부분들의 변화를 줄여야만 개발 시간을 단축할 수 있었지요.


이같이 실루엣이 크게 변경되지 않는 선에서 디자인을 변경해야 하는 제약이 있다 보니,

계층이 높아질수록 건물이 더 정돈되고, 꽃과 같은 특정 장식이 추가되는 방식으로 디자인하기로 결정하였습니다.


천막, 오두막, 저택의 초기 컨셉 아트. 부유층이 살수록 꽃 장식이 추가되는 방식


10여 개의 건물들이 그려질 때쯤 미쳐 고려하지 못했던 상황들을 마주하게 되었는데요.

첫 번째 문제는 바로 건물에 그려진 벽과 지붕의 유무였습니다.

<래토피아>는 <래트로폴리스>와는 달리 플레이어가 벽과 문을 건설하고 그 안에 시설을 배치하는 게임이었고,

건물보다는 건조물과 같은 시설 형태가 적합하다는 것을 뒤늦게 깨달았습니다.

주거지는 지붕과 벽이 있는 “집” 건물에서 지붕과 벽이 없는 “침대”로 변경될 필요가 있었고,

이때부터 건물(Building)이라는 단어보다 입에 잘 붙지 않는 건조물(Structure)이라는 단어를 사용하게 되었지요.


그렇게 지붕과 벽이 없는 건조물들을 디자인하다 보니, 곧 두 번째 문제에 봉착하였습니다.

벽과 지붕이 없다 보니 대장간이나 농장처럼 꽃 장식을 붙이기 어려운 건조물들이 등장하였기 때문이지요.

그래서 건조물에 꽃 장식을 추가해 계층을 나누기보다는,

진한 고동색, 갈색, 흰색이라는 포인트 컬러를 통해 나누는 방식이 제안되었고, 큰 고민 없이 변경하기로 하였습니다.



침대, 농장, 목욕탕 건조물의 컨셉 이미지


그러나 게임 중반부부터 돌을 재료로 사용하는 건조물들이 추가되자 문제가 발생하였습니다.

나무를 재료로 사용하는 목조 건조물들을 추가할 때는 포인트 컬러의 적용이 쉬웠지만,

포인트 컬러 적용이 어려운 다른 재질의 건조물들이 등장하기 시작하였고,

이 기회에 나무 ⇒ 돌 ⇒ 대리석으로 건조물의 재질이 확확 바뀌도록 변경하자는 의견도 나왔습니다.

하지만 용광로와 같이 나무 재질과는 전혀 안 어울리는 건조물들은 어떻게 처리할지에 대한 해답이 잘 나오지 않았고,

또 어떤 건조물들이 추가될 지 몰라 섯불리 규칙을 변경하기가 부담되더군요.



명확한 규칙과 컨텐츠를 정해놓고 개발을 진행했다면 좋았겠지만,

많은 것들이 확정되지 않은 상태에서 규칙을 정하다 보니 결국 시행착오를 거듭하는 것 같습니다.

아직 해답을 찾지 못해 개발을 진행해 보며 방법을 찾기로 하였는데,

추후에 어떤 결과가 나오게 될지 걱정이 되네요.




시민들의 행동

한편 프로그래밍 쪽에서는 시민들의 이동을 어떻게 만들지 고민하였습니다.

우선 타일맵 방식의 게임을 사용하기에 A*알고리즘을 이용하여 기본적인 이동을 구현하였습니다.

그러나 <래토피아>의 시민은 1x1 크기가 아닌 1x2 크기를 가지고 있기에,

시민의 크기에 맞춰 이동 가능한 경로 지도(Navigation map)를 따로 계산해 만들어줘야 했습니다.

더하여 여기에 점프를 통한 이동과 사다리를 타고 이동할 수 있는 위치들을 추가로 계산하여,

떨어져 있는 구역들이 연결된 거대한 경로 지도를 만들게 되었습니다.


초기 길찾기 프로토타입


경로 지도는 타일이 부서지거나, 사다리가 지어지는 등 경로에 관련된 사건들이 발생할 때마다 갱신되는데요.

그러나 수많은 시민들이 각자 다른 경로 지도를 가진다면 동시에 너무 많은 연산이 필요하게 되니 지도의 수를 최소화할 필요가 있었습니다.

그래서 이를 해결하기 위해 한 캐릭터를 집어서 모든 시민들이 그 캐릭터의 경로 지도를 보고 이동하게 하였지요.


구현을 하다 보니 추후 2x3, 6x4 등 거대한 크기를 가진 적 캐릭터의 이동을 구현할 수 있을지 걱정이 되더군요.

시민과 크기가 다른 캐릭터들은 이동에 있어 새로운 규칙과 경로 지도가 필요하며,

많은 계산과 예외 처리가 필요할 것이 분명하였죠.

추후에 적들의 크기를 시민과 동일하게 고정하거나 길찾기가 필요 없는 방식들을 생각해 보아야 할 것 같습니다.



시민들이 목적지까지 제대로 이동할 수 있게 된 이후로는 시민에 대한 채굴 명령 시스템을 구현하였습니다.

플레이어가 명령을 내릴 타일을 지정하면 시민이 목표 타일 주변까지 가장 가까운 경로로 이동하고,

일정 시간 동안 채굴 작업을 수행하여 목표 타일을 파괴한 뒤 보수를 받는 기능이었죠.


광부의 탄생


채굴 명령을 구현하고 테스트하다 보니 다른 세심한 처리들이 추가로 필요하더군요.

대표적으로 시민의 채굴 가능한 범위를 어느 정도로 지정할지,

여러 시민에게 채굴 명령이 내려진 타일들을 어떻게 분배할지,

채굴을 하다가 갇혀버리는 현상을 어떻게 방지할지 등에 대한 알고리즘을 조정하고 개선해야 했습니다.



채굴 명령에 이어서는 맵에 떨어진 자원들을 저장고로 운반하는 행동을 구현하였는데요.

채굴 행동으로 타일이 파괴되면 파괴된 타일 위치에 자원이 떨어지고,

떨어진 자원들을 저장고에 모은 뒤 도시에 새 건조물들을 건설하게 하기 위함이었습니다.


채굴 행동 이후에 즉시 정리 행동을 수행하는 시민들


초기에는 광부 직업을 가진 특정 시민들이 채굴을 전문적으로 담당하고,

자원을 정리하는 일은 일감이 없는 시민들이 수행하게 하려고 하였습니다.

그러나 <래토피아>는 시민들 개개인이 노동의 대가로 보수를 받는 시스템이 존재하였고,

채굴 행동과 운반 행동의 보수가 다르다보니, 일부 시민들에게 부의 쏠림 현상이 발생하게 될 여지가 있었습니다.

따라서 시민들이 채굴과 운반을 번갈아가면서 할 수 있도록 처리하여 좀 더 균등한 소득이 확보되게 하였죠.



이후로는 채굴과 운반 행동을 기반으로 채집과 건설 명령 등을 빠르게 만들 수 있었는데요.

시민들이 명령에 따라 요리조리 이동하는 걸 보니 슬슬 시뮬레이션 게임의 면모가 드러나는 것 같았습니다.




마인드맵과 마일스톤

개발을 진행하다 보니 게임 내 어떤 요소들이 추가될지, 작업물의 총량은 어느 정도 될지 더 구체화할 필요가 있었습니다.

게임 내부뿐만 아니라 게임 외부로도 타이틀, 오프닝, 홍보 영상 등의 작업도 고려 대상이었지요.

그래서 윔지컬(Whimsical)이라는 디자인 툴을 이용해 개발에 필요한 작업들을 정리해 보았습니다.

전에는 파워포인트나 엑셀을 통해 작업 목록 등을 정리하곤 했었는데,

윔지컬은 정렬이나 위치 이동, 수정이 더욱 편리해 정리하기 좋더군요.




작업을 담당할 인원에 따라 선 색깔을 구분해 표현해 보기도 하였습니다.


정리를 하면서 해야 될 작업이 정말 많다는 것을 다시금 느꼈습니다.

할 일이 많다 보니 후반부에는 작업의 일부를 포기해야 할지도 모른다는 두려움도 느꼈지요.

그래서 마인드맵을 작성한 겸 개발 우선순위도 표시해가며 개발 순서를 설정하였습니다.


또한 언제 어떤 행사/사업에 지원할지 주요 일정들을 가늠해 본 뒤,

정해진 개발 순서를 토대로 마일스톤을 세워 대략적인 정리를 하였지요.

매사 계획대로 흘러가지는 않겠지만, 적어도 예기치 못한 상황이 발생했을 때 유연하게 대처할 수 있을 것 같습니다. 




긴 글 읽어주셔서 감사드립니다.

다음 화에서는 애니메이션 제작 과정과 시민의 행동 트리에 대해 적어보도록 하겠습니다.

홈페이지 구독 메일에 이메일을 등록해 주시면 개발일지, 행사, 이벤트, 출시 소식 등을 전해드리도록 하겠습니다!


저번 개발일지를 통해 신규 Unity 프로그래머 분을 구할 수 있었는데요,

이제는 UI를 도와주실 디자이너 분을 찾고 있습니다.

관심 있으신 분은 아래 내용을 확인 후 연락 주세요!

https://casselgames.notion.site/3bfe510aa2434942ba521c48ba7829f9

8 0