소개
ML-Agents로 학습시킨 AI 캐릭터가 게임을 스스로 플레이하게 만들고, 그 AI 플레이 데이터를 가지고 게임 밸런스를 자동으로 조정할 수 있을지 실험하는 프로젝트입니다.
원래 게임 밸런싱은 사람이 직접 N판 플레이 → 감으로 평가 → 수치 조정 → 또 N판 플레이... 의 반복이라 시간도 많이 들고 일관성도 떨어집니다. "AI한테 대신 플레이시키고, 그 결과를 보고 자동으로 수치를 조정하면 어떨까?" 라는 단순한 질문에서 시작했습니다.
베이스 게임은 직접 만드는 대신 오픈소스로 풀려 있는 뱀서류(Vampire Survivors 스타일) 로그라이크 키트 (Roo-Roo-Roo/survivors-roguelike-kit, MIT 라이선스)를 활용했습니다.
진행 방법
대략적인 구성:
[AI 학습] → [AI가 자동 플레이] → [플레이 로그 수집] → [데이터로 밸런스 진단] → [수치 자동 수정] → 반복
각 단계별 기술 스택:
단계
사용 도구
게임
Unity 6 (오픈소스 뱀서류 게임)
AI 학습
Unity ML-Agents + PyTorch (강화학습 — PPO/SAC 등 ML-Agents 지원 알고리즘 중 선택)
자동 플레이 로그 수집
PlayTrace — FastAPI + SQLite로 직접 만든 게임 로그 서버 + 실시간 대시보드
자동 밸런싱 오케스트레이션
Claude Code Skills & SubAgent — 슬래시 명령으로 학습/플레이/진단/수정 파이프라인 실행
Unity Editor 외부 제어
unity-cli — AI 에이전트용으로 설계된 Unity Editor CLI. C# 코드 실행·Play 모드 토글·콘솔 로그 조회 등 지원. 이 프로젝트에서는 자산 수치 편집과 Play/Stop 자동화에 사용
PlayTrace는 어떤 API를 제공하나 (자체 제작한 로그 수집 서버):
API
역할
POST /api/sessions
한 번의 테스트 단위(세션) 생성. project / version / session_name으로 구분
POST /api/logs
게임에서 발생한 이벤트 1건 기록 (key + value + play_no + 시각)
GET /api/logs/search
조건별 로그 조회 (특정 키, 특정 회차 등). 진단 스크립트가 사용
GET /api/logs/latest
대시보드 실시간 폴링용 (1.5초마다 증분 조회)
GET /api/sessions
세션 목록 조회 (스킬이 최신 세션을 찾을 때 사용)
DELETE /api/sessions/reset
DB 전체 초기화
핵심 컨벤션은 "1 session = N 회 플레이" — 게임 한 번 시작 → 사망/재시작 N번 → 종료. 같은 세션 안에서 play_no = 1, 2, 3, ...로 누적되어 회차별 비교가 가능합니다.
특히 Claude Code 슬래시 명령어 7개를 단계별로 만들었습니다.
학습 단계 3개:
스킬
역할
/ml-init
Unity 프로젝트에 ML-Agents 패키지·Python 가상환경·폴더 구조를 자동 셋업
/ml-setting
씬 분석 후 학습 목표·관측·보상을 Q&A로 결정 → Agent C# 스크립트·학습 설정 자동 생성
/ml-start
Python 트레이너 + Unity Editor 동시 실행, 학습 로그
밸런싱 단계 4개:
스킬
역할
/bal-init
학습된 모델을 게임에 inference 모드로 부착 + PlayTrace 로깅 통합
/bal-run
AI에게 N판 자동 플레이시키고 PlayTrace에 데이터 누적, 결과 요약표 출력
/bal-apply
플레이 데이터를 분석해 6가지 진단(사망 원인 편중, 한판 길이 고정 등)을 돌리고, 해당하는 게임 자산(적 데미지·스폰 빈도·플레이어 체력 등)을 자동 수정 + git diff로 프리뷰
/bal-converge
목표 KPI(예: "생존시간 3~4분")까지 위 두 단계를 무인으로 반복. 시작 전 1회만 사용자 승인
스킬과 별도로, 특정 도메인 검증이 필요할 때 호출하는 서브에이전트 4개도 두었습니다:
서브에이전트
역할
unity-expert
Unity 씬 구조·컴포넌트·Input System 분석 (ML-Agents 통합 전 캐릭터 구조 파악용)
rl-advisor
강화학습 알고리즘 선택(PPO/SAC/POCA 등) + 하이퍼파라미터 추천 + 학습 곡선 해석
ml-code-reviewer
생성된 Agent C# 스크립트 리뷰 (관측·행동·보상 정합성 검증)
ml-test-validator
본격 학습 전 짧은 smoke 테스트로 보상 신호·환경 상호작용 사전 검증
스킬이 메인 워크플로우를 진행하다가 도메인 전문 판단이 필요해지면 이 서브에이전트들을 부르는 구조입니다 (예: /ml-setting 진행 중 unity-expert로 씬 분석, 학습 코드 생성 후 ml-code-reviewer로 검증).
사전 셋업(학습 완료 + inference 부착 + 첫 /bal-run으로 config 시드 + /bal-apply 조정 파라메터 정의)을 한 번 끝내 두면, 이후 사이클은 한 줄로 무인 실행됩니다:
/bal-converge kpi="생존시간 3~4분 사이" max_iter=5
그러면 AI가 자동으로 게임 N번 플레이 → 데이터 분석 → 적/스폰/플레이어 능력치 자동 조정 → 다시 플레이 → KPI 도달까지 반복합니다.
결과와 배운 점
지금 상태: 게임에 실제로 적용해서 사이클을 돌리고 있는 중입니다. 한 번의 사이클에서 적 데미지·스폰 빈도·플레이어 체력 등 10개 자산을 자동으로 수정해서 생존시간이 변하는 걸 데이터로 확인했습니다.
배운 점:
모델만 잘 만들어진다면 (쉽진 않겠지만) 가능성은 있다고 보여짐
SubAgent, Skills, Slash Command, Hook 같은 방법으로 진행을 어느 정도 편하게는 해줄 수 있지만 결국 코드와 개발에 대한 이해가 필요
앞으로 계획:
더 많은 사이클을 돌려서 실제 KPI 도달까지 검증
다른 게임 장르에 같은 파이프라인 적용해 보기 (재사용성 확인)
도움 받은 글
오픈소스 뱀서류 게임 베이스: Roo-Roo-Roo/survivors-roguelike-kit (MIT)
Unity Editor 외부 자동화: youngwoocho02/unity-cli
Unity ML-Agents 공식 문서