Godot 개발일지 #3 : 턴 시스템

저번 일지에서는 그리드 이동 / 경로 표시 / 오브젝트 / 코스트 시스템을 만들었습니다. 이번 일지에서는 턴제 게임의 필수 요소 '턴 시스템'을 만들고, 게임의 전투 양상이 어떤 방식으로 흘러갈지 고민해봤습니다. 일반적인 턴 시스템은 제가 추구하는 방향에 맞지 않아서 페이즈를 통해 적의

Godot 개발일지 #3 : 턴 시스템 | 만들래-thumbnail

저번 일지에서는 그리드 이동 / 경로 표시 / 오브젝트 / 코스트 시스템을 만들었습니다. 이번 일지에서는 턴제 게임의 필수 요소 '턴 시스템'을 만들고, 게임의 전투 양상이 어떤 방식으로 흘러갈지 고민해봤습니다. 일반적인 턴 시스템은 제가 추구하는 방향에 맞지 않아서 페이즈를 통해 적의 공격을 미리 표시하는 스타일로 만들게 되었습니다.

기본적인 턴 시스템

<턴 흐름>

1. 턴 매니저에서 유닛 등록

- 플레이어가 먼저 시작하도록 설정

2. 플레이어 턴

- 카드 드로우

- 이동 및 액션

- 종료 버튼으로 턴 엔드

3. 적 유닛 턴

- 이동 및 액션 후 자동 턴 엔드

(2번부터 다시 반복)

먼저 간단한 턴 시스템을 만들어봤습니다. 턴 매니저에 유닛을 등록하고, 순서에 따라서 유닛이 하나씩 턴을 가져가는 방식입니다. 이제 적의 행동 AI를 만들어서 턴 흐름을 가시적으로 살펴보려고 했는데... 여기서 문제가 생겼습니다. 제가 추구하는 전투의 흐름이 단순히 공방을 주고 받는 느낌이 아니기 때문입니다. 그래서 먼저 제 프로젝트가 제공하려는 경험에 대해 고민해보고, 다른 게임들을 참고해서 새로운 턴 시스템을 만들어봤습니다.

제공하려는 경험

videoframe_171732.png
videoframe_171732.png

첫 번째 일지에서 저는 '적을 숨긴다'는 아이디어를 냈습니다. 딱히 깊은 고찰을 하고 결정한 아이디어는 아니었고 그래픽 제약을 해소하는 방법 중의 하나였습니다. 그렇다보니 전투 디자인을 결정하려는 지금에서는 이것이 오히려 방해가 되었습니다. 솔직히 전투 디자인을 확정짓고 개발을 시작한 것이 아니기 때문에 지금이라도 간단하게 고민을 하려 합니다.

게임의 메카닉을 만들려면 먼저 게임을 통해 플레이어에게 제공하려는 경험 혹은 감정을 생각해봐야 합니다. 특정 경험을 제공하려면 플레이어는 어떤 행동을 해야 할까요? 그 행동을 이끌어내려면 어떤 식으로 코드를 짜야 할까요? 이렇게 역순으로 되짚어가면서 메카닉을 생각하는 것입니다. 이후엔 메카닉에 맞게 코드를 짜고, 플레이어가 메카닉으로 게임을 어떻게 플레이하는지 그 행동으로 어떤 감정을 느끼는지를 플레이 테스트로 확인하게 됩니다.

ss_bcf41d163e44e5f087d97acedeba152fac04efb5.600x338 (1).jpg
ss_bcf41d163e44e5f087d97acedeba152fac04efb5.600x338 (1).jpg

제가 제공하고 싶은 경험은 '전략적인 상황 대처'입니다. 특정 문제 상황이 주어졌을 때, 그걸 해결할 최선의 방법을 찾아내는 것입니다. 문제를 풀기 위해서는 먼저 무엇이 문제인지 확실히 해야 합니다. , , 같은 게임은 적의 공격 방향/대상/타입을 표시함으로써 문제를 제시합니다. 그리고 플레이어는 자신이 가진 스킬을 활용해 그 문제를 해결해야 합니다. 즉, 적의 공격을 표시하는 메카닉으로 플레이어는 문제를 인식하고, 스킬을 사용해서 문제를 해결하여 전략적인 재미를 느끼게 됩니다.

페이즈 시스템과 기타 게임 디자인

<페이즈 흐름>

1. 적 유닛 준비

- 이동 및 공격 준비 후 턴 엔드

2. 플레이어 턴

- 카드 드로우

- 용사와 고양이 캐릭터를 이동시키거나 공격

- 종료 버튼으로 턴 엔드

3. 적 유닛 액션

- 준비했던 액션을 실행

(이하 반복)

07.gif
07.gif

위에서 언급한 게임들은 일반적인 턴 시스템과 다르게 적 유닛에게 두 번의 기회가 주어집니다. 그래서 저는 페이즈 시스템을 통해서 이걸 구현해봤습니다. '적 유닛 준비 - 플레이어 액션 - 적 유닛 액션'이라는 각 페이즈를 순환하는 방식입니다. 시각적으로 표현하면 아주 좋겠지만, 아직 공격 시스템을 개발하지 않았기 때문에 텍스트와 이동을 통해 페이즈를 보여주는 정도로만 하겠습니다.

또, 이동 경로 내에 적이 있으면 우회하는 시스템을 추가했습니다. 이건 이전부터 만들다가 작동을 안해서 미뤄뒀었는데, 알고보니 너무 사소한 문제였습니다. 그냥 코드 순서를 바꿔서 해결했죠... 그리고 초반에 생각했던 적 유닛을 숨기는 시스템은 너무 많은 문제를 야기할 것 같아서 폐기했습니다. 대신 정보를 숨기는 방식으로 적용할 예정입니다.

다음 일지에서는 적 유닛의 스킬 시스템을 개발할 예정입니다. 솔직히 이번 주에는 게임 디자인 고민을 하느라 개발을 많이 하진 못했습니다. 그냥 하나씩 하나씩 해나갈 수 있는 게 아니라 시스템이라는 게 이것저것 다 얽혀있다보니 최소한의 틀을 잡는 시간이 필요했습니다.

videoframe_86348.png
videoframe_86348.png

GMTK 게임잼 2023 TOP 20 중 하나인

현재 생각하고 있는 프로젝트의 모습은 두 개의 플레이어블 캐릭터를 조작하는 것입니다. 두 캐릭터는 다른 역할을 가졌지만, 코스트를 공유합니다. 그래서 플레이어 턴에 두 캐릭터를 자유롭게 스위칭하면서 이동 및 스킬을 사용하는 것이죠. 또, 적 유닛은 기본적으로 정보를 숨기고 있지만, 플레이어 캐릭터 주변에서는 정보가 밝혀지게 됩니다.

그러니까 적의 정보를 파악하는 보상을 위해 적에게 가까이 접근하는 리스크를 감수해야 하는 것입니다. 생각해보니 사쿠라이 마사히로 씨가 강조했던 것이 바로 리스크 & 리워드였군요. 이것도 중요하게 염두에 두고 게임 디자인을 해야겠습니다.

참고자료

[1] [Godot] 고도 엔진으로 턴제 게임에서 Turn Manager 구현하기! │김감자르반4세 https://www.youtube.com/watch?v=gjJt02e904A

[2] Game Genres - a Design Perspective │Indie Game Clinic

https://www.youtube.com/watch?v=3KJbYdNP5js

[3] MDA: A Formal Approach to Game Design and Game Research │Robin Hunicke, Marc LeBlanc, Robert Zubek

https://users.cs.northwestern.edu/~hunicke/pubs/MDA.pdf

[4] How To Think Like A Game Designer │Game Maker's Toolkit https://www.youtube.com/watch?v=iIOIT3dCy5w

[5] Risk and Reward [Game Essence] │Masahiro Sakurai on Creating Games https://www.youtube.com/watch?v=FXqEykD5Ub4

[6] The Best Games from GMTK Game Jam 2023 │Game Maker's Toolkit

https://www.youtube.com/watch?v=tYxZ_LOlFnU

작성자: 꼬마용

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

조회수: 21

댓글수: 0

작성일: 7/13/2025