Godot 개발일지 #2 : 그리드 이동과 오브젝트

저번 일지에서는 제약을 이용해 아이디어를 생각해내고, UI 목업을 그려보면서 게임 아이디어의 핵심을 잡아봤습니다. 숨어있는 적을 감지하는 아이소메트릭 턴제 게임이었죠. 다만, 기획은 더 깊이 들어가지 않고 바로 개발에 들어가서 기본적인 기능부터 구현해보려고 합니다. 내가 만들고 싶어하는

Godot 개발일지 #2 : 그리드 이동과 오브젝트 | 만들래-thumbnail

저번 일지에서는 제약을 이용해 아이디어를 생각해내고, UI 목업을 그려보면서 게임 아이디어의 핵심을 잡아봤습니다. 숨어있는 적을 감지하는 아이소메트릭 턴제 게임이었죠. 다만, 기획은 더 깊이 들어가지 않고 바로 개발에 들어가서 기본적인 기능부터 구현해보려고 합니다. 내가 만들고 싶어하는 게임이 정말로 만들 수 있는지를 확인하고, 개발 하는 과정에서 아이디어를 얻어 게임을 계속 발전시켜나가는 겁니다.

이번 일지부터는 개발한 프로토타입을 실제로 플레이할 수 있게 업로드할 예정입니다. 다만, 각 일지에 해당하는 모든 프로토타입을 따로 올리는 건 아니고, 최신 일지에 맞게 하나의 프로젝트를 계속 최신화할 예정입니다.

게임 플레이 우선주의

Death-Stranding-Release-Leaked-01-Header.jpg
Death-Stranding-Release-Leaked-01-Header.jpg

데스 스트랜딩은 '죽은 고래가 늘어선 해변' 이미지로부터 시작되었다

자, 여러분이 게임을 만든다면 어떤 것부터 시작하시겠습니까? 많은 분들이 자신의 게임이 만들어졌을 때 어떤 모습일지 상상하면서 가장 접근하기 쉽고 영감이 바로 떠오르는 작업부터 시작합니다. 게임의 분위기와 세계관을 떠올리며 컨셉아트를 제작하고, 장르는 내가 좋아하는 <아이작의 번제>처럼 절차적 생성을 넣어서 로그라이크 던전으로 하고 등등... 기획서에서 나아가 설정집에 가까운 문서를 제작하게 되죠. 그 다음에 그 설정과 기획에 시스템을 끼워맞추며 개발하기 시작합니다.

하지만 이런 방식으로 개발이 진행되면, 부딪치게 되는 난관이 있습니다. 이미 개발이 꽤 진척되었는데, 생각한 것보다 게임 플레이가 재미없다는 걸 뒤늦게 깨닫는 것입니다. 이대로 진행해봤자 아름답게 지루한 게임이 될 테고, 다시 만들자니 너무 많은 시간을 손해보게 됩니다. 반면, 게임 플레이를 우선하면서 프로토타입을 제작했다면 빠르게 재시작할 수 있습니다.

저는 닌텐도의 개발 방식을 좋아하는데, 강력한 핵심 메카닉을 중심으로 게임을 디자인하고 그것으로 게임 내 오브젝트와 상호작용합니다. 예를 들어, 마리오는 점프를 통해 오브젝트의 다양한 상호작용을 이끌어냅니다. 게다가 세계관, 스토리, 캐릭터의 외형 등의 요소도 메카닉과 상호작용하는 기능에 맞게 디자인됩니다.

저는 간단하게나마 픽셀아트로 컨셉을 잡고 시작하는 걸 좋아하지만, 프로토타입이 거기에 휘둘리지 않도록 최소한의 디자인만 하려고 노력중입니다. 물론 미학을 우선시하면서 개발하는 게임들도 많습니다만 적어도 저에겐 맞지 않는 방법이었고 숙련된 개발자가 아니라면 가급적 피하는 걸 권하고 싶습니다.

아이소메트릭 그리드 이동

01.gif
01.gif

이제부터는 실제 코딩을 하면서 프로토타입을 만들어 보겠습니다. 가장 먼저 아이소메트릭 그리드에 맞게 플레이어를 이동시킬 겁니다. 저는 TileMapLayer 노드로 아이소메트릭 그리드를 세팅하고, AStarGrid2D 기능으로 길 찾기 시스템을 적용했습니다. 플레이어의 현재 위치와 마우스의 현재 위치를 타일 좌표로 반환하고, AStarGrid로 경로를 그려서 이동하도록 만든 것입니다.

구조는 이해하고 있었지만, 코드를 직접 짜기는 참 난감했는데, 역시 요즘은 바이브 코딩의 시대인가 봅니다. 다른 사람이 만든 데모를 Gemini 2.5 pro를 통해서 최신화하고 이상한 부분은 약간 다듬어서 구현할 수 있었습니다. 개인적으로 AI를 쓰더라도 코드를 직접 생성해달라고 하는 건 효율이 좋지 않았습니다. 고도 엔진이 마이너해서 그런지 자꾸 틀린 정보나 업데이트 이전 정보를 가져오더라고요. 다만, 만들어진 코드를 수정하는 경우에는 꽤 탁월합니다.

02.gif
02.gif

그 다음은 이동 경로를 표시하고 싶었습니다. 이 시스템은 GDQuest의 튜토리얼에서 영감을 받아 그리드 타일 위에 경로 표시용 타일을 하나 더 만드는 것으로 구현했습니다. 경로 역시 이전에 만든 AStarGrid를 이용했습니다.

03.gif
03.gif

그 다음에는 이동 범위 제한을 걸어서 이동 가능한 칸을 클릭해야만 이동하도록 표시했습니다. 또, 이동 범위 안에 마우스가 들어왔을 때 더 잘 보이게 표시를 했습니다. 다만, 이동 범위 밖에 마우스가 위치할 때, 경로 표시가 버벅이면서 잘 컨트롤되지 않는다는 느낌을 받았습니다.

04.gif
04.gif

결국 이동 범위 밖의 경로도 표시하도록 만들었더니 보기가 더 나아졌습니다. 이라는 게임의 표시 방법과 같아졌는데, 처음에는 범위 밖을 왜 표시하지 싶었지만, 만들다보니 이해하게 되었네요. 확실히 경로를 내가 컨트롤한다는 느낌이 들어서 자연스럽습니다.

오브젝트 구현

00_ConceptArt.png
00_ConceptArt.png

실제론 적이 보이지 않겠지만, 이렇게 경로에 겹친다면?

이제 오브젝트를 만들 차례입니다. 저번 일지에서 말했다시피 (적 유닛을 포함한) 오브젝트는 기본적으로 숨겨진 상태고, 특정 액션을 통해서 모습이 드러나게 만들려고 합니다. 그런데 만약 숨겨진 상태에서 플레이어가 그 위치를 지나간다면 경로는 어떻게 표시해야 할까요? 단순히 기획서를 쓸 때는 크게 고민하지 못했던 지점이지만, 직접 개발을 하려고 보니 생각하게 되는 지점입니다.

<오브젝트의 숨겨진 위치와 플레이어 경로가 겹칠 때> 1. 플레이어 경로가 해당 위치를 장애물로 인식하고, 우회하도록 설정 2. 경로가 장애물을 인식하지 않고, 플레이어가 경로를 이동하다가 장애물을 만나면 그 앞에서 정지

선택지를 한 3개 정도는 만들고 싶지만, 딱히 머릿속에서 좋은 아이디어가 떠오르진 않네요. 1번 방법을 사용하면 경로 계산이 간단할 수는 있지만, 플레이어가 마우스를 휘적거리는 것만으로도 경로 표시를 피해가는 위치를 발견해서 적을 숨긴다는 의미가 미약해지게 됩니다. 2번은 괜찮은 방법 같습니다. 경로 안에 장애물을 만나면 그 장애물의 모습을 드러내면 되겠습니다. 만약 이동 중에 적을 만나면 바로 공격하는 카드를 만드는 것도 재밌겠군요.

05.gif
05.gif

충돌 감지는 이전에 그리드 기반 게임을 만들 때 사용했던 튜토리얼에서 영감을 받아 RayCast2D 노드를 사용했습니다. 일종의 팔을 뻗으면서 이동한다고 생각하면 됩니다. 한 칸씩 팔을 뻗고 충돌이 없으면 이동하는 방식으로 돌다리를 두들기면서 이동하는 것입니다. 오브젝트를 감지해서 모습이 드러나게 만드는 것도 이 RayCast2D 노드를 통해 쉽게 만들 수 있습니다. 지금은 단순히 스프라이트를 보이게 하는 것뿐이지만, 나중에는 간단한 효과를 넣어보려고 합니다.

또, 원래는 오브젝트가 감지되어 모습을 드러낸다면, 장애물로 인식하여 우회 경로를 그리려고 했습니다. 그러나 일단 구현하려면 좀 더 시간이 필요하고, 생각보다 중요한 부분은 아니라서 일단 미뤄두겠습니다. 게다가 오브젝트가 최소 한 턴 동안 모습을 드러내고 있을지 아니면 잠깐 모습을 드러내고 바로 숨을지 여부를 정하지 못했거든요.

06.gif
06.gif

마지막으로 코스트 시스템을 만들었습니다. 이건 만들기 어렵지 않았습니다. 플레이어가 이동한 칸만큼 줄어드는 코스트 UI를 만들고, 기존 경로 시스템이 가진 이동 범위 제한과 연결했습니다. 지금은 한 칸 이동할 때마다 코스트도 하나씩 줄어드는 방식이지만, 이후에는 경로를 다 이동하고 코스트가 줄어들게 만드는 것과 예상 소모치를 미리 볼 수 있도록 조정하려고 합니다.

이번에는 첫 주여서 포스트를 두 개 올렸습니다. 앞으로는 일주일마다 하나씩 올릴 예정입니다. 평일동안 개발하고, 금요일 밤이나 토요일쯤 올리게 될 것 같네요.

참고자료

[1] The Games That Designed Themselves │Game Maker's Toolkit https://www.youtube.com/watch?v=kMDe7_YwVKI

[2] The mistake every new game developer makes (Developing 2) │Game Maker's Toolkit https://www.youtube.com/watch?v=ZMbIvmv25u0

[3] How to find amazing game ideas │Game Maker's Toolkit https://www.youtube.com/watch?v=0m60QbT85Tc

[4] Nintendo - Putting Play First │Game Maker's Toolkit https://www.youtube.com/watch?v=iIOIT3dCy5w

[5] Isometric 2D point and click movement │domogo https://godotengine.org/asset-library/asset?user=domogo

[6] Tactical RPG Movement series │GDQuest https://www.gdquest.com/tutorial/godot/2d/tactical-rpg-movement/

[7] Grid-based movement :: Godot 4 recipes │KidsCanCode https://kidscancode.org/godot_recipes/4.x/2d/grid_movement/index.html

[8] Silver, a font for games │Poppy Works https://poppyworks.itch.io/silver

작성자: 꼬마용

관련 프로젝트: Isometric Grid (Prototype)

조회수: 43

댓글수: 0

작성일: 7/5/2025