개요: 왜 AI 네이티브인가
본선은 단 48시간이라는 게임 개발을 하기에는 매우 짧은 시간이 주어지기에, 사전 과제에서 AI 게임 개발 파이프라인을 미리 구현해보고 확보해두는 것이 중요하다고 생각했습니다.
1인 개발로 17일이라는 짧은 기간동안 3D 소울라이크 액션과 실제와 같은 트레이딩 시뮬레이션을 동시에 다뤄야 하는 게임을 개발하는 것은 전통적인 방식으로는 규모상 불가능한 스코프입니다.
기간 안에 완성도 있는 게임을 구현하기 위해서는 모델링 · 리깅 · 애니메이션 · 음악 · 효과음 · 씬 조립 · 로직 구현 · QA 까지 창작 전 단계를 AI 도구가 커버하고, 개발자는 기획 · 프롬프트 설계 · 결과 검증 · 통합 판단만 하는 AI 네이티브 개발 방식이 필요합니다.
물론 AI 도구를 개별적으로 쓰는 것과 파이프라인으로 엮는 것은 별개의 문제입니다.
이 문서는 프로젝트에서 실제로 검증된 도구 스택, 세션 단위 개발 파이프라인,
자동 QA 루프, 그리고 그 과정에서 부딪힌 컨텍스트 한계와 해결책 (session-log-skill) 을 정리합니다.
0.1 Godot 을 선택한 이유
Godot 의 씬 · 리소스 · 스크립트 (.tscn · .tres · .gd) 는
전부 사람이 읽을 수 있는 텍스트 파일입니다. LLM 이 씬을 열어 노드 트리를 뜯어고칠 수 있다는 뜻이죠.
Unity 의 .prefab 은 GUID 가 얽힌 YAML 이라 .meta 파일과 교차 참조가 필요하고,
Unreal 의 .uasset 은 아예 바이너리라 AI 가 파싱조차 못 합니다.
게다가 GDScript 는 파이썬을 닮아 대부분의 LLM 이 익숙하게 다룹니다. 씬 편집과 스크립트 작성을 전부 텍스트로 처리할 수 있는 엔진. Godot은 AI 네이티브 개발에 최적화된 선택지였습니다.
0.2 AI 네이티브 개발의 본질적 한계
씬 편집을 텍스트에 맡긴다는 건 WYSIWYG 에디터를 반쯤 포기한다는 뜻이기도 합니다. 노드 계층 · UID · 시그널 연결이 텍스트 파일 안에만 존재하는 순간, 개발자가 눈으로 확인하며 드래그로 고치던 감각이 사라집니다.
즉흥 수정 능력이 AI 가 쥐고 있는 컨텍스트에 종속됩니다.
세션이 끊기거나 컨텍스트가 요약돼 세부가 날아가면, 개발자 혼자서 그 파일을 다시 이해하는 것부터가 부담입니다.
이 프로젝트에서도 그런 종속을 여러 번 실감했고, 뒤에 나올 session-log-skill 이 그 부담을 조금이라도 덜어보려는..? 노력이었습니다.
AI 도구 스택
창작 단계별 8개 도구, 런타임 LLM (Azure OpenAI), 오케스트레이터 (Claude Code) 로 구성. 도구마다 다른 도구가 대체하기 어려운 영역을 맡고, 결과물은 다음 도구의 입력이 됩니다.
1.0 전체 스택 요약
| 단계 | 도구 | 산출물 |
|---|---|---|
| 3D 캐릭터 · 무기 · 가구 | Meshy v6 Pro | .fbx 5명 캐릭터 + 무기 3종 + 가구 9종 |
| 2D 컨셉 아트 · 컷씬 | Gemini · Nano Banana | .png 오프닝 5장 + 튜토리얼 엔딩 + 캐릭터 컨셉 |
| BGM | Suno Pro | .ogg 11 트랙 · 인디 소울라이크 톤 |
| SFX | ElevenLabs API | .mp3 64+ 개 (플레이어 · 몹 · 보스) |
| 맵 · VFX 모델링 | Claude Code × Blender MCP | .glb 3 아레나 + 프로시저럴 텍스처 |
| 게임 로직 · 씬 조립 | Claude Code × Godot MCP | 195 개 GDScript · 86 개 .tscn |
| 오토 리깅 + 애니메이션 | Mixamo | 35+ .fbx 애니 재사용 |
| 런타임 시장 뉴스 | Azure OpenAI (gpt-5-nano) × Azure Functions | 플레이 중 시간당 4개 뉴스 · 봇 반응 유도 |
| 오케스트레이션 · 통합 | Claude Code (VSCode Extension) | 전체 에이전트 세션 관리 |
1.1 3D 에셋 — Meshy
- 용도
- 텍스트/이미지 → 3D 캐릭터·무기·가구 생성
- 사용 범위
- 플레이어 · 4명 몬스터 (worker · homer · student · boss) · 무기 3종 · 홈룸 가구 9종
- 산출 포맷
- .fbx (bone rigged) · .glb · .obj
- 라이선스
- Meshy Pro 상업 사용 가능 (구독자 자산 소유권)
- MCP
@meshy-ai/meshy-mcp-server— Claude Code 에서 직접 호출
얼굴 표현 · 메시 예산 문제
Meshy 로 디테일한 얼굴 표정을 뽑으려면 캐릭터당 수십만 매시가 붙습니다. AI 3D 모델은 아직 low-poly 조건에서 표정을 살리는 최적화가 약해서, 이목구비를 세밀하게 살리는 순간 메시가 폭증합니다. PC 게임이라면 감당할 수 있지만, 이 프로젝트는 모바일 타깃입니다. 캐릭터와 몬스터, 보스가 렌더링되는 전투 씬을 60fps로 원활하게 프레임 드랍 없이 플레이하려면 캐릭터당 메시를 대폭 낮춰야만 했습니다.
문제는 이 과정에서 얼굴의 디테일은 거의 포기해야 했습니다. 눈 · 코 · 입의 곡면이 각지고, 표정 애니메이션은커녕 기본 얼굴조차 어색해집니다. 그래서 얼굴을 가리는 컨셉으로 아예 방향을 틀었습니다.
1.2 2D 컨셉 아트 — Gemini Nano Banana
- 용도
- 오프닝 · 튜토리얼 컷씬 이미지 · 캐릭터 컨셉 아트
- 접근 방식
- API의 비용 문제 우회 → Playwright 자동화로 웹앱 조작
- 참조 이미지 락
- 주인공 컨셉 v2 이미지를 매 shot 에 첨부해 캐릭터 일관성 유지
- 산출물
- 오프닝 컷씬 5장, 캐릭터, 몹의 컨셉 아트
- 공통 스타일
- Korean mobile game event cartoon (Nikke · Priconne · Epic Seven 계열)
tools/gemini-cutscene/ 에 Playwright 러너를 직접 구현했습니다. 프롬프트는 JS 데이터로
관리하고 node generate-cutscene.js --cutscene=opening 로 배치를 돌립니다.
결과 이미지는 assets/ui/cutscenes/ 에 자동 저장되고, 진행 로그도 함께 남습니다.
1.3 BGM — Suno v5.5 Pro
- 용도
- 타이틀 · 홈룸 · 트레이딩 · 튜토리얼 · 전투 · 보스 페이즈 1/2/3 · 승리 · 패배 · 컷씬 (11 트랙)
- 톤 정의
- 인디 소울라이크 + 주식 시장 · Katana ZERO + Signalis + Undertale 참조
- 핵심 태그
synthwave·vaporwave·lofi hip hop·chiptune·dark ambient·industrial- 네거티브
- 오케스트라 · 타이코 드럼 · K-드라마 톤
- 후처리
- Audacity → 트림 → -6dB peak normalize → 48kHz WAV → .ogg
Custom Mode + Instrumental ON 은 필수. 모든 곡에 indie game soundtrack,
retro digital 태그를 공통으로 유지해 톤을 잡았습니다. 프롬프트 원본은
tools/suno_bgm_prompts.md 에 있습니다.
1.4 SFX — ElevenLabs
- 용도
- 전투 SFX · 무기 · 스킬 · 피격 · 보스 패턴 · UI 등 64+ 개
- API
POST /v1/sound-generation·tools/generate_elevenlabs_sfx.py배치 러너- 카테고리
- player (17) · boss (25+) · mob (10+) · ui (기존 자산 유지)
- Resume-safe
- 기존 파일 스킵 · 3회 재시도 · 요청간 0.4s 슬립
- 스타일
- 짧은 액션 사운드 (0.5~1s) · 자연 언어 프롬프트 · "young woman quick pained grunt, short" 톤
레퍼런스 팩은 게임 톤과 맞는 SFX 팩을 찾기 힘들어서, 이 방법으로 전부 새로 뽑았습니다.
물론 찰떡같이 맞는 톤을 뽑기는 쉽지 않고, 노이즈도 많지만... 사실 시간이 좀 부족하여 최대한 잘 살리는 SFX로 만족했습니다.
그래서 같은 액션도 _1, _2, _3 변형을 여러 개 두어, 반복 재생될 때 지루하지 않게 했습니다.
1.5 맵 · VFX 모델링 — Claude Code × Blender MCP
- 용도
- 4개 몬스터 아레나 (사무실, 아파트, 대학교, 보스) · 텍스처 · 힐팩 · VFX 모델
- 워크플로우
- Claude Code 가 Python 스크립트를 MCP 통해 Blender 에 실행 → 씬 생성 → .glb export
- 텍스처
- Python + PIL 로 프로시저럴 (brick · wood · tile · carpet · fabric) → JPEG bake
- 주의사항
- 매 execute_blender_code 호출은 fresh scope · 헬퍼는 매번 인라인 필요
"육각형 중앙 구조물 제거 + BossArena 급 사실적 무늬" 같은 자연어 스펙을 Claude Code 가 Blender MCP 로 받아, hex mesh 삭제 + Python 프로시저럴 노이즈 텍스처 베이크로 구현합니다. 이 부분은 3D 모델링이나 미술적 감각이 부족한 제게 큰 힘이 되어 줬습니다.
1.6 게임 로직 · 씬 조립 — Claude Code × Godot MCP
- 용도
- GDScript 작성 · .tscn 씬 편집 · headless 실행 · 디버그 로그 캡처
- 도구 세트
run_project·get_debug_output·launch_editor·add_node·save_scene- 병용
- Godot CLI 를 Bash 로 직접 호출 →
--headless --quit-after 8로 파싱·런타임 검증 - 산출물
- 195 개 GDScript · 86 개 씬 · 51 개 리소스 · 27 개 md 문서
1.7 오토 리깅 + 애니메이션 — Mixamo
- 용도
- Meshy 로 만든 캐릭터 fbx 를 humanoid 스켈레톤으로 오토 리깅 + 애니메이션 라이브러리 재사용
- 애니메이션 수
- 35+ 개 (idle · walk · run · slash · dodge · hit react · death · boss taunt · combo attacks)
- 파이프라인
- FBX 다운 → Blender 에서 root bone 삽입 → glTF export → Godot 자동 임포트 →
humanoid_lib.tres통합 - 라이선스
- Adobe Mixamo TOS: 상업 사용 무료
물론 이 방식은 이미 누군가 만들어 놓은 애니메이션을 재사용하는 것이므로, 캐릭터의 개성이나 액션의 디테일을 살리기에는 한계가 있습니다. 하지만 17일이라는 짧은 개발 기간 안에서, 제가 애니메이션을 직접 구현하거나 모캡으로 구현하는 것은 거의 불가능 하기에, 이틀 정도 시도해봤지만... 원하는 퀄리티가 도저히 나오지 않아 우회하기로 결정했습니다. 하지만 mixamo가 가지고 있는 에셋이 워낙 방대하여 기본적인 움직임과 전투 애니메이션을 확보하는 데에는 충분했습니다.
1.8 런타임 LLM 뉴스 — Azure OpenAI × Functions
- 용도
- 플레이 중 게임 시간 1시간마다 시장 뉴스·공시·찌라시 4개씩 생성하여 봇의 시장 반응을 유도합니다.
- 모델
- Azure OpenAI
gpt-5-nano(저지연·저비용) - 백엔드
- Azure Functions (
kospi-news-fn) — OpenAI 프록시 + 인증 계층 - 클라이언트
- Godot
NewsClient.gd— HTTPRequest 노드 · sim time 누산 · 실패 시 silent disable - 요청 주기
- REQUEST_EVERY_SIM_SECONDS = 3600 (게임 내 1시간) → 하루 6-7회 배치
- 인증
- 2단 — Azure Function Key (URL
?code=...) +X-Game-Auth헤더 shared secret
이는 게임 개발에 AI를 활용한 정확한 사례는 아니지만, 나름 인게임 내에서 핵심적인 기능을 AI를 활용하여 구현한 사례라 추가했습니다.
아키텍처 흐름
-
Godot 클라이언트 요청
NewsClient.gd가market_tickedsim delta 누적 → 1시간 도달 시 자동 POST. 요청 body 에 현재 보유 종목·현금·주간·요일·티커 메타를 함께 보냄 (뉴스 관련도 향상). -
Azure Function 인증 · 프록시
Function Key (URL 파라미터) 로 1차 확인 +
X-Game-Auth헤더의 shared secret 로 2차 확인. OpenAI API 키는 서버에만 존재하며 클라이언트에 노출되지 않음. -
Azure OpenAI 호출
gpt-5-nano에 시장 컨텍스트 + JSON 스키마 프롬프트 전송. 응답으로 뉴스 4개 (headline · sentiment · target_ticker · delta_pct · type) JSON 반환. -
Godot 파싱 · 시장 주입
클라이언트가 응답 파싱 →
NewsFeed.inject(items)로 뉴스 큐에 삽입. 이후 봇Actor들이 뉴스를 읽고 매수·매도 결정 → 실제 가격 변동으로 반영.
Azure Function을 사용한 이유
- API 키 은닉 — Azure OpenAI 키를 게임 클라이언트가 들고 있으면 APK 해킹 시 전량 노출
- 2단 인증 — Function Key + shared secret 로 무단 사용 차단
- 레이트 리미팅 — Function 레벨에서 IP·클라이언트별 rate limit 적용
- 비용 통제 — 서버가 요청 감사 및 필요 시 캐싱 · 배치 처리 가능
- 모델 교체 용이 —
gpt-5-nano→ 다른 모델로 갈아 끼울 때 클라이언트 앱스토어 재배포 불필요
Fallback · 실패 안전
.news-key없으면 조용히 disabled → 정적 뉴스 덱으로 게임 진행 (심사 편의)- 네트워크 타임아웃 (30초) →
push_warning만, 게임 크래시 없음 - HTTP 4xx/5xx → 응답 300자만 로그 남기고 무시
_inflight가드 → 이전 요청 대기 중 중복 요청 방지
상세 셋업 가이드는 NEWS_LLM_SETUP.html 에서 확인할 수 있습니다.
Azure OpenAI 리소스 프로비저닝, Function 배포, .news-key 생성 절차, 로컬 테스트 방법을 포함합니다.
개발 파이프라인
개발자가 100% 손을 잡는 사전 작업을 마친 뒤, 각 세션마다 8단계 사이클을 돌립니다. 단계마다 담당 도구가 다르고, 앞 단계 결과물이 뒤 단계의 입력이 되도록 짜여있습니다.
2.1 사전 작업 · 개발자 100%
AI 에게 넘길 수 없는 창작의 골격은 개발자가 직접 기술합니다. 여기가 흔들리면 뒤에 나오는 모든 AI 산출물이 방향을 잃습니다.
- 기획서 작성 — 장르 융합의 이유 · 핵심 재미 · 스코프 정의
- 스토리 작성 — 세계관 · 주인공 · 적대자 · 서사 아크
- 핵심 흐름 구성 — 트레이딩 → 목표치 → 몬스터 → 스킬 언락 → 보스 사이클
- 등장인물 설계 — 김지우 · 성과금 개미 · 대출 개미 · 대학생 개미 · 외국인 투자자
- 시스템 스펙 문서 —
docs/COMBAT_SKILLS_v0.1.html·docs/SIM_SPEC.md
2.2 세션 단위 8단계 사이클
-
2D 컨셉 아트 생성
새 등장 인물의 컨셉을 시각화. 후속 3D 생성의 참조로 사용.
Gemini · Nano Banana -
3D 에셋 생성
캐릭터 · 무기 · 가구 등을 텍스트/이미지 프롬프트로 생성.
Meshy v6 -
오토 리깅 + 애니메이션 삽입
Meshy FBX → Mixamo 오토 리깅 → 애니메이션 라이브러리 재사용.
Mixamo -
핵심 로직 설계 · 구현
GDScript 작성 · 상태머신 · 시그널 · Resource 설계.
Claude Code × Godot MCP -
맵 · VFX 모델링
Blender Python 스크립트로 아레나 프로시저럴 생성 + 텍스처 베이크.
Claude Code × Blender MCP -
SFX 생성 · 삽입
새 액션/이벤트마다 프롬프트 정의 → 배치 러너로 일괄 생성 → AudioManifest 등록.
ElevenLabs API × Claude Code -
자체 검증 · 로그 확인
Godot 을 headless 로 8초 실행 → 파싱 에러 · 런타임 경고 grep → 즉시 수정.
Godot CLI × Claude Code -
개발자 플레이 테스트
실제 실행 → 시각/감각 확인 → 사용자 피드백 → 다음 사이클 입력.
Human
AI 자동 검증 루프
개발자가 빌드 → 실행 → 검증 → 문제 확인 → 보고를 손으로 매번 도는 대신, 에이전트가 스스로 엔진을 실행하고, 캡처와 로그를 뒤져서 문제를 찾는 루프를 만들었습니다.
3.1 자동 검증 루프
-
게임 개발 작업
새 스크립트 · 씬 · 리소스 편집. MCP 통해 엔진 상태 조회.
Claude Code × Godot MCP Blender MCP -
세밀한 로깅 삽입
각 동작·이벤트마다
print("[STATE] ..."),[HIT] dmg=%d,[BOSS PHASE] ...같은 태그된 로그 심기. 검증 자동화의 핵심. -
Headless 검증
Godot CLI × Claude Codegodot --headless --quit-after 8→ 파싱 · 런타임 오류 즉시 감지. -
실행 화면 자동 캡처
Godot MCP
run_project로 씬 실행 → 스크린샷 저장 → 파일 경로 반환. -
캡처본 확인
Claude Code 가 캡처 이미지를 로드해서 시각적으로 검토. UI 위치, 카메라 각도, VFX 발생 여부 등을 확인.
-
문제 파악 · 수정
로그 grep + 캡처 검토 결과를 종합하여 원인 지정 → 코드 수정.
-
반복 (1 ~ 6)
문제 해결까지 자동 반복. 사용자는 최종 결과만 검증.
모바일 빌드에서만 몹 근접 공격이 데미지를 주지 못하는 버그를 이 루프로 잡았습니다.
범인은 Godot 4 Android 의 PackedStringArray Resource export 버그 (필드가 빈 배열로 저장됨).
Array[String] 타입으로 바꿔 해결했습니다.
컨텍스트 한계와 session-log-skill
자동 검증 루프는 강력하지만, 캡처 검토가 컨텍스트 윈도우를 빠르게 갉아먹습니다. 이 프로젝트에서 부딪힌 병목과, 해결책으로 직접 만든 Claude Code 스킬을 정리합니다.
4.1 문제점
- 캡처 검증의 컨텍스트 부담 — 세션당 스크린샷 수십 장을 에이전트가 로드해서 살피면 컨텍스트가 순식간에 부풀어 오릅니다.
- 잦은 compact 발생 — 200K 토큰짜리 컨텍스트도 캡처 검토 3~4번이면 바닥납니다. Claude Code 가 이전 대화를 자동으로 compact 해주지만, 그 과정에서 세부는 사라집니다.
-
매 compact 마다 잃어버리는 것들
- 자동화 워크플로우의 정확한 단계
- 이번 세션에서 실패한 접근과 그 이유
- 핵심 자산 · 로그 파일 · 검증 스크립트의 경로
- 다음 세션이 이어가야 할 작업 우선순위
같은 실패를 다른 세션에서 서너 번 반복하는 사태가 실제로 벌어졌습니다.
auto-memory (MEMORY.md) 는 변하지 않는 사실을 담는 그릇이라,
세션별 진행 상황과 실패 기록을 담기엔 부족했습니다.
4.2 해결책 · session-log-skill
이 문제를 몇 번 겪고 나서, Claude Code 의 skill로 session-log-skill 을 직접 만들었습니다. auto-memory 를 옆에서 보완하는 세션 단위 워크 저널입니다.
동작 방식
-
Compact 직전 · 큰 작업 종료 시 자동 저장
프로젝트 · 날짜-시간 스코프로 세션에서 진행한 중요 작업, 워크플로우, 실패 원인, 핵심 자산 위치, 참조할 git hash 를 정리해서 파일 저장.
-
새 세션 시작 시 자동 로드
"지난 세션 내용 확인하고 진행하자" 같은 트리거로 자동 활성. 최근 3~5개 커밋 + 최근 저장된 세션 로그 + MEMORY 를 함께 확인.
-
연속성 유지
실패의 기록과 진행 중인 내용을 다음 세션이 즉시 이어받아, 같은 실수를 반복하지 않고 워크플로우 흐름을 유지.
auto-memory 와의 차이
| 항목 | auto-memory (MEMORY.md) | session-log-skill |
|---|---|---|
| 스코프 | 지속적 사실 | 세션별 진행 상황 |
| 수명 | 영구 | 참조 후 archive 가능 |
| 담는 것 | 사용자 프로필 · 프로젝트 상수 · 툴 사용 규칙 | 실패 기록 · 워크플로우 스텝 · 파일 경로 · 다음 할 일 |
| 업데이트 주기 | 정보 변경 시 | 세션 종료 · compact 직전 |
이 skill 은 오픈소스로 열어뒀습니다. Claude Code 를 쓰는 누구든 가져다 쓸 수 있습니다. github.com/Choonham/session-log-skill
프롬프트 사례
도구별로 실제 프로덕션에서 쓴 프롬프트의 대표 샘플들. 프로젝트 저장소의
tools/ 원본을 정리했습니다.
5.1 Meshy · 캐릭터 생성
Korean businessman in dark charcoal suit, standing T-pose, full body, low poly game character, neutral face, professional attire, clean topology, quad mesh, subtle exaggerated musculature, imposing presence
Meshy 프롬프트 규칙
T-pose명시 — 리깅 호환성 확보low poly game character— 모바일 성능 예산 준수neutral face— 이후 애니메이션에서 자연스러운 변화clean topology, quad mesh— Blender/Godot 임포트 시 안정- 얼굴 이슈 회피 — 정장 · 후드 · 마스크 컨셉으로 유도
5.2 Gemini Nano Banana · 컷씬 이미지
[씬 감정 컬러] Warm apartment interior — soft cream + amber lamp light from side. Cool blue-gray night through window (contrast). Character skin natural warm tone. Vibrant but not over-saturated. [씬 — 게임 이벤트 만화 컷] Chest-up frontal portrait of 김지우 (24세, 여자), three-quarter angle, looking directly at viewer. Face: cute cartoon intro — confident subtle smile (slight upturned mouth corner), warm eyes with visible pupils showing personality. [스타일 공통] Korean mobile game event cartoon (Nikke · Priconne · Epic Seven 계열). Character identity: 참조 이미지 첨부.
핵심 원칙 — 매 shot 마다 주인공 참조 이미지를 첨부해서 캐릭터 정체성을 락 처리합니다. 프롬프트는 씬 감정 컬러 → 씬 구성 → 스타일 공통의 3단 구조로 굳혀뒀습니다.
5.3 Suno v5.5 · BGM 프롬프트
Vibe: Katana ZERO title · Perturbator "Sentient" · Carpenter Brut Style dark synthwave, cyberpunk indie game, retro digital, neon menace, analog synth, indie soundtrack Description Menacing 3AM apartment glow. Solo ant investor sharpening their last resolve before entering the market. Slow driving bass, warm analog pad, distant siren texture. No vocals. Instrumental. Length: 2:00 loop-ready Tempo: 90 BPM, minor key
공통 규칙 — 모든 트랙에 indie game soundtrack, retro digital
태그를 유지합니다. 오케스트라 · 타이코 · K-드라마 톤을 금지하지 않으면 자꾸 "영화 OST" 느낌이 나서 게임과 어울리지 않았습니다.
5.4 ElevenLabs · SFX 배치 생성
# (category, key, prompt, duration_seconds or None) SFX_PROMPTS: list[tuple[str, str, str, float | None]] = [ # --- A. Player Combat (11) --- ("player", "sword_slash", "sword swing in the air", None), ("player", "sword_hit", "sword hitting flesh, meaty thud", None), ("player", "kick_whoosh", "quick kick whoosh", None), ("player", "casting_start", "magic spell charging up", 0.5), ("player", "limit_up_fire", "fire aura erupting", 0.5), ("player", "shield_activate", "magic shield activating with chime", None), # --- B. Player React (4 variants) --- ("player", "player_hurt_1", "young woman quick pained grunt, short", None), ("player", "player_hurt_2", "young woman short surprised pained grunt", None), ... ]
배치 러너 특징
- Resume-safe — 기존 파일이 있으면 스킵
- 3회 재시도 · 요청 사이 0.4s 슬립 (rate limit 예의)
- 카테고리별 폴더 자동 생성 (
assets/audio/sfx/elevenlabs/{cat}/) - 자연 언어 그대로 던집니다 — "quick pained grunt, short" 같은 짧은 서술이 가장 잘 나옵니다
5.5 Blender MCP · 프로시저럴 씬
워커 몹 아레나 — 사무실 컨셉: 1. 기존 육각형 중앙 구조물 제거 2. 카펫 (그레이 톤 브라운 노이즈, 512×512 JPEG 베이크) 3. 벽 (연한 아이보리 · subtle 브릭 패턴) 4. 파티션 (다크 그레이 · 매트 metallic 0.2) 5. 데스크 (밝은 우드 그레인 · 3~5 라인 결) 6. 컬럼 (콘크리트 · 회색 노이즈) 모든 텍스처는 Python + PIL 로 프로시저럴 생성 후 bake_material_to_image() 로 UV 맵에 굽고 JPEG export. 결과: assets/models/arenas/arena_worker_office.glb + 5장 텍스처 (t_carpet, t_wall, t_part, t_desk, t_col)
5.6 Claude Code · 초기 프로젝트 프롬프트
이번 AI 해커톤의 사전 과제로 만들 게임: "주중엔 주식으로 벌고, 주말엔 그 돈으로 시장의 세력에게 복수하는 3D 소울라이크 액션 게임" 핵심 요구사항: - Godot 4.7 · Android APK 목표 · Snapdragon 6xx · 60fps - 트레이딩 시뮬 (LLM 뉴스 + 봇 시장) + 3D 소울라이크 전투 - 17일 안에 완결 서사 아크 하나 완주 (오프닝 → 튜토 → 3 잡몹 → 보스 → 엔딩) - 이전 2D 아이소메트릭 시도는 폐기 · 스코프 크리프 절대 금지 가장 먼저 할 일: 1. CLAUDE.md 로 프로젝트 헌장 확정 2. docs/HACKATHON_STRATEGY.md 로 스코프·서사·10일 스프린트 3. .mcp.json 로 도구 셋업 (godot + meshy + blender)
이 초기 지시는 CLAUDE.md 로 굳어져, 이후 모든 세션이 참조하는 프로젝트 헌장이 됐습니다.
스코프 크리프 방지 규칙과 이전 프로젝트의 실패 원인 분석까지 담긴
self-contained 프로젝트 문서가 세션 사이 연속성의 뼈대가 됩니다.
회고 · 향후 계획
6.1 마주친 장애물들
-
컨텍스트 관리 — 자동 검증 루프에서 캡처를 살피는 게 가장 큰 소모 요인이었습니다.
session-log-skill로 어느 정도 눌렀지만, 여전히 하루 5~10회는 compact 가 걸립니다. - Meshy 얼굴 품질 — 사람 얼굴 표현이 어색해서 컨셉을 정장·후드 쪽으로 우회했습니다. 개선 필요.
- Cascadeur 학습 곡선 — AI 물리 애니메이션 도구지만 17일 스코프에 안 들어왔습니다. 다음 프로젝트로 미룸.
- Gemini 웹앱 자동화의 취약성 — API 비용이 부담스러워서 Playwright 로 웹앱을 우회했습니다. 대신 웹 UI 만 바뀌어도 러너를 다시 짜야 합니다.
6.2 회고
사실 저도 해커톤 모집 공고를 보고, 도전을 결심하면서도 남은 기간동안 과연 그럴듯한 플레이어블 데모를 만들 수 있을까? 라는 걱정이 앞섰습니다.
개발자라는 직업을 가지고 있지만, 게임 개발은 사이드 프로젝트로 실패한 경험만 가지고 있었고, 3D 게임 개발은 아예 처음이었습니다.
하지만 AI 도구를 활용한 개발 파이프라인을 구축하고, 자동 검증 루프를 통해 효율적인 개발 환경을 만들면서, 예상보다 훨씬 빠르게 프로토타입을 완성할 수 있었습니다.
이걸 기뻐해야 하는 건지, 슬퍼해야 하는 것인지... 아직은 잘 모르겠습니다만, 앞으로 1~2년만 더 지나면 훨씬 더 완벽한 퀄리티의 게임이 1인 개발로도 완성이 될 수 있겠구나.. 라는 생각이 들었습니다.
이번 기회를 통해, 게임 개발을 위한 AI 파이프라인은 어떻게 짜야할 지 어느 정도 감을 잡았습니다. 본선 진출 여부와 상관 없이, 이번 도전은 1인 개발을 하고 있는 제게 큰 경험이 될 거 같습니다.
이런 기회를 만들어 주셔서 감사하다는 말씀 드리고 싶습니다.