
바이브코딩으로 게임 만들기 #11 — 깃발 시스템 + 심플 대형
자동 전투 게임에서 플레이어가 할 수 있는 게 뭘지 고민했다. 유닛이 알아서 싸우는데 플레이어가 개입하는 재미를 어떻게 줄 수 있을까. 나온 답이 깃발 시스템이다. 깃발 4종 집결(1번), 돌격(2번), 방어(3번), 퇴각(4번). 키보드 숫자키에 배치했다. 각 깃발은 맵에…

자동 전투 게임에서 플레이어가 할 수 있는 게 뭘지 고민했다. 유닛이 알아서 싸우는데 플레이어가 개입하는 재미를 어떻게 줄 수 있을까. 나온 답이 깃발 시스템이다. 깃발 4종 집결(1번), 돌격(2번), 방어(3번), 퇴각(4번). 키보드 숫자키에 배치했다. 각 깃발은 맵에…

Warrior, Lancer, Monk를 추가하던 날 Character 베이스 클래스가 한계에 왔다. 전투 로직, 버프 처리, 스킬 발동이 한 파일에 다 들어가서 수백 줄. 몽크의 힐 스킬 하나 고치려고 전투 코드 사이를 한참 스크롤하다가, 이대로는 안 되겠다 싶어…

처음에 유닛 충돌 처리를 CharacterBody2D의 CollisionShape2D 하나로 다 했다. 이동 충돌이랑 피격 판정이 같은 도형에 섞여 있으니까 뭔가 이상한 일이 계속 생겼다. 공격 범위가 이동 충돌과 간섭하거나, 팀 구분 없이 아군끼리도 피격 처리되는 식이었다. 역할을 나눴다…

아처가 활을 쏠 때 화살이 언제 나가야 하는지가 생각보다 까다로운 문제였다. 처음엔 공격 애니메이션이 시작되는 순간 화살을 발사했는데, 비주얼이 이상했다. 활시위를 당기는 모션이 아직 진행 중인데 화살이 튀어나가 버렸다. 애니메이션 프레임과 타이밍을 맞춰야 한다 해결 방법은…

아처 유닛을 만들면서 화살 발사체를 어떻게 구현할지 고민했다. 일단 화살 하나만 필요했지만, 나중에 마법 투사체나 다른 발사체가 생길 수도 있었다. 그래서 Projectile 베이스 클래스를 만들고 Arrow가 상속받는 구조로 갔다. 베이스 클래스에는 공통 로직만 Projectile은 발사체가 공통으로…

유닛 AI를 어떻게 구현할지 고민을 꽤 했다. 상태 머신(State Machine)이 첫 번째 선택지였는데, 상태가 늘어날수록 전환 조건이 복잡해지는 게 걱정됐다. 찾아보다가 LimboAI라는 Godot 플러그인을 알게 됐고, 비헤이비어 트리(Behavior Tree)를 써보기로 했다. 비헤이비어 트리가 뭔가 비헤이비어 트리는…

유닛 여러 개가 같은 목표로 이동하면 다 겹쳐버린다. 길찾기만으로는 부족하고 서로 밀어내는 처리가 필요하다. Godot의 NavigationAgent2D에는 Avoidance 기능이 내장되어 있는데, 처음엔 그냥 켜면 되는 줄 알았다. 그냥 켜면 안 된다 avoidance_enabled = true로 설정하면 끝인 줄…

Godot 4에서 유닛 이동을 처음 구현할 때 타일맵 내장 네비게이션을 썼다. TileMap에 네비게이션 레이어를 추가하고 NavigationAgent2D를 붙이면 되니까 처음엔 간단해 보였다. 그런데 실제로 써보니 문제가 하나씩 나왔다. 타일맵 내장 방식의 문제 타일마다 네비게이션 폴리곤을 직접 설정해야…

Tiny Reign을 만들면서 유닛 수가 늘어날수록 한 가지가 계속 신경 쓰였다. 스탯이 코드에 박혀 있다는 것. 전사 공격력을 바꾸려면 .gd 파일을 열고 숫자를 찾아서 고쳐야 했다. 유닛이 네 종류일 때도 이미 귀찮았는데, 앞으로 더 늘어나면 어떻게…

Tiny Reign을 만들면서 Claude Code를 써온 지 꽤 됐는데, 쓰다 보니 잘 되는 것과 안 되는 것이 점점 명확하게 나뉘더라. 잘 됐던 것 코드를 짜기 전에 먼저 대화를 나눴다. 왕국 자원 시스템을 만들어야 할 때, 바로…