Claude Opus 5.5로 첫 Unreal 플레이 가능 레벨 만들기
1인 개발자를 위한 단계형 가이드입니다. 실제 Unreal 연결을 확인하고, 수집물 3개와 승리·재시작이 있는 그레이박스를 직접 Play 검증한 뒤 Meshy와 Blender의 필요성을 판단합니다.
목차

실무적인 결론은 첫날부터 Claude Code, Unreal, Meshy, Blender를 모두 연결하지 않는 것입니다. 먼저 Claude Code가 실제로 실행 중인 Unreal Editor를 읽을 수 있다는 사실을 확인하세요. 그다음 걸을 수 있고, 물건 3개를 모으고, 승리하고, 다시 시작할 수 있는 그레이박스를 만듭니다. 각 단계는 직접 Play에서 검증해야 합니다. 이 핵심 루프가 안정된 뒤에만 생성형 3D 에셋이나 Blender 정리가 추가 복잡성을 감수할 가치가 있는지 판단하세요.
이 글은 최신 공식 문서를 바탕으로 한 가이드이며, 작성자가 독자의 프로젝트에서 실제 실행을 완료했다는 실험 보고가 아닙니다. Epic은 여전히 Unreal MCP를 Experimental로 표시하며 기능, API, 데이터 형식이 바뀔 수 있다고 밝힙니다. 따라서 여기서는 MCP 연결, 도구의 성공 응답, 실제로 플레이 가능한 결과를 서로 다른 증거로 취급합니다.
이 방식이 맞는지 먼저 판단하기
기본적인 Unreal 개념을 알고, 버전 관리를 사용하며, 작은 변경마다 Play 테스트할 의지가 있는 1인 개발자에게 가장 잘 맞습니다. Claude는 설명하고 검토할 수 있는 작업을 빠르게 만들 수 있지만, 이동감·카메라·충돌·게임 감각이 좋은지는 혼자 판단할 수 없습니다.
| 상황 | 권장 사항 |
|---|---|
| 프로젝트 구조를 읽고 변경을 검토하며 Play할 수 있다 | 아래의 최소 그레이박스부터 시작 |
| 게임 루프만 검증하고 싶다 | Unreal 기본 도형을 유지하고 Meshy·Blender는 미룸 |
| 백업이나 rollback 경로가 없다 | 중단하고 복사본과 버전 checkpoint를 먼저 만듦 |
| 프롬프트 하나로 완성 게임을 기대한다 | 목표를 관찰 가능한 작은 시스템으로 나눔 |
| Actor 하나를 옮기거나 값 하나를 바꾸는 일이다 | 대부분 수동 작업이 더 빠름 |
Anthropic은 Opus 5.5를 복잡한 코딩과 장시간 에이전트 작업에 적합한 모델로 설명합니다. 그렇다고 시각적 게임 결과가 스스로 검증되는 것은 아닙니다. 모델에는 읽기·계획·실행을 맡기고, 승인·관찰·Play 검증은 사람이 유지하세요.
도구를 더 설치하기 전에 최소 완성 조건 정하기
이 가이드의 목표는 네 가지뿐입니다.
- 플레이어가
Player Start에서 시작해 명확한 경로로 끝 지점까지 걸을 수 있다. - 보이는 수집물 3개가 각각 한 번만 카운터를 올려 0에서 3이 된다.
- 세 개를 모두 모은 뒤에만 끝 지점에서 승리한다.
R을 누르면 플레이어 위치, 카운터, 수집물, 승리 상태가 초기화된다.
이 조건을 프로젝트 brief에 적고 각 batch마다 변경 내용, 기대 결과, 실제 결과, 통과 여부를 기록하세요. connected는 플레이 가능을 뜻하지 않습니다. compile 성공도 플레이 가능을 뜻하지 않습니다. 도구가 요청을 수락했다는 사실도 충분하지 않습니다. 각 gate는 사람이 직접 Play해야 통과합니다.
Gate 1: Claude Code와 공식 Unreal MCP 연결
먼저 복구 지점 만들기
프로젝트를 저장하고 현재 상태를 commit 또는 shelve하세요. Epic 공식 플러그인은 에디터 프로세스 안에서 Python을 실행할 수 있는 도구를 포함해 Claude에 폭넓은 실시간 접근을 제공합니다. 공식 README는 이를 어시스턴트가 생성한 임의 코드 실행처럼 취급하고, 긴 세션 전에 저장하며 결과 diff를 검토하라고 권고합니다.
중요한 프로젝트에서 --dangerously-skip-permissions를 사용하지 마세요. 첫 시도는 복사본, sandbox 또는 폐기 가능한 branch에서 진행하세요.
Unreal 플러그인 두 개 활성화
이 안내는 현재 Unreal Engine 5.8 Documentation에 게시된 Epic 공식 Unreal MCP 문서를 기준으로 합니다. 사용 중인 engine build에 Unreal MCP(ModelContextProtocol)와 All Toolsets(AllToolsets)가 실제로 포함되어 있어야 합니다. 모든 UE5 버전에 같은 플러그인이 있다고 추정하지 마세요. 하나라도 없으면 중단하고, 커뮤니티 MCP로 대체하지 말고 Epic 문서가 지원하는 build를 사용하세요.
공식 순서대로 설정합니다.
- Edit → Plugins에서 Unreal MCP를 활성화합니다.
- All Toolsets도 활성화합니다. 없으면 server가 있어도 실제 tools가 노출되지 않을 수 있습니다.
- Editor를 재시작합니다.
- Editor Preferences에서 Auto Start Server를 켜거나 console에서 실행합니다.
ModelContextProtocol.StartServer
기본 local endpoint는 http://127.0.0.1:8000/mcp입니다. 기본 인증이 없고 remote 공개용이 아닙니다. Internet으로 port forward하거나 공유 PC에서 사용하지 마세요.
Claude Code 설정 생성
Unreal 콘솔에서 실행합니다.
ModelContextProtocol.GenerateClientConfig ClaudeCode
Launcher 설치는 일반적으로 .mcp.json을 .uproject 옆에 기록하고, 소스 build는 Engine/ 옆 workspace root에 기록할 수 있습니다. port를 바꾸면 다시 생성하세요. 생성된 설정이 있는 root에서 Claude Code를 시작합니다.
Epic 공식 Claude Code 플러그인을 설치합니다.
/plugin install unreal-engine-skills-for-claude-code@claude-plugins-official
공식 marketplace가 없다면 먼저 추가합니다.
/plugin marketplace add anthropics/claude-plugins-official
모델 접근, Unreal, 에셋 서비스를 분리하기
Claude Code는 Anthropic 계정이나 호환 모델 API를 사용할 수 있습니다. BetterToken을 쓴다면 현재 Claude Code 연결 문서는 ANTHROPIC_BASE_URL을 https://bettertoken.ai로 설정하되 /v1을 붙이지 말고, ANTHROPIC_AUTH_TOKEN을 로컬에서 설정하라고 안내합니다. 실제 API Key를 채팅, repository, 자료 bundle에 넣지 마세요.
Anthropic의 공식 model ID는 claude-opus-5-5입니다. BetterToken으로 routing할 때는 현재 Model Plaza에서 정확한 ID를 복사하고 선택한 Key group에서 사용 가능한지 확인하세요. 시작 후 /model과 provider 요청 기록으로 실제 routing을 검증하고 과거 설정을 그대로 쓰지 마세요.
초록 표시가 아니라 실제 read-only 호출로 검증하기
네 단계를 모두 확인합니다.
/plugin에 공식 Unreal 플러그인이 활성화되어 있다./mcp에unreal-mcp가 보인다.- Unreal Output Log에 port 또는 의존성 오류가 없다.
- read-only prompt가 실제 level 이름, 주요 Actor,
Player Start존재 여부를 반환한다.
마지막 항목이 현재 에디터가 실제로 응답한다는 증거입니다. Epic은 proxy가 connected이거나 cache에 도구가 남아 있어도 라이브 Unreal 호출의 성공을 보장하지 않는다고 명시합니다.
Gate 2: 걸을 수 있는 그레이박스만 만들기
먼저 이미 조작 가능한 third-person 기반을 준비하세요. Player Start는 spawn 위치만 표시하며, 그 자체로 조작 가능한 character, GameMode, input, camera를 제공하지 않습니다. 새 project라면 Unreal의 Third Person template을 사용하세요. 기존 project라면 active GameMode가 조작 가능한 third-person pawn을 spawn하고, 이동 input과 follow camera가 작동하며, level에 Player Start가 있는지 확인하세요.
MCP로 geometry를 바꾸기 전에 Simulate가 아니라 Play를 누르세요. character가 실제로 spawn하고, WASD로 움직이며, mouse로 camera를 조작할 수 있는지 확인한 뒤 PIE를 중지하세요. 하나라도 실패하면 그레이박스 prompt로 숨기지 말고 이 기반부터 고치세요.
기반이 통과하면 Claude에게 current level, GameMode, player character, available toolsets를 read-only로 읽고 계획과 변경할 assets를 먼저 나열하게 하세요. tool이 없으면 중단해야 합니다. 경계는 다음처럼 설정할 수 있습니다.
Play 검증을 통과한 third-person 기반을 사용해 current level에 최소 그레이박스를 만든다. 기존 player character, GameMode, input mappings, camera를 유지하고 교체하거나 다시 만들지 않는다. primitive로 바닥, 경계, 명확한 route, goal marker를 만든다. enemy, art asset, 복잡한 UI는 추가하지 않는다. 생성·변경한 모든 asset을 보고한다. 필요한 tool이 없거나 compile 실패 또는 결과가 명시적 success가 아니면 중단한다.
실행 규칙:
- 같은 asset이나 editor state에 의존하는 변경은 직렬로 수행합니다.
- C++, Blueprint, shader compile이 끝날 때까지 기다립니다. request accepted는 compile 완료가 아닙니다.
- 모든 result status를 읽고 명시적 success가 아니면 중단합니다.
Play 검증 A: 다시 Play를 누르고 Player Start에서 spawn한 character로 route 전체를 걸으세요. 경계를 벗어나거나 좁은 곳에 걸리거나 보이지 않는 장애물을 jump해야 하면 실패입니다. 관찰한 문제만 수정하고 camera, material, route를 곁다리로 바꾸지 마세요.
통과 후 저장, commit, 복구 지점을 표시하세요.
Gate 3: 수집물 3개 추가
다음 batch는 수집 규칙만 추가하고 이미 통과한 경로는 보호합니다.
경로 위에 명확히 보이고 서로 떨어진 collectible 3개를 추가한다. 접촉은 각 object에서 한 번만 발생하고, 이후 숨기거나 제거하며, 읽을 수 있는 counter를 0에서 3까지 올린다. Player Start, 경로, 경계, 끝 지점은 움직이지 않는다. 관련 Blueprint, variable, event, UI asset을 보고하고 Play checklist를 제공한다.
Play gate B: 정상 순서와 역순으로 수집하고, 각 object가 한 번만 증가시키는지, 값이 1·2·3으로 변하는지, 이전 위치를 다시 지나도 증가하지 않는지, 새 Play session이 0에서 시작하는지 확인합니다.
Claude가 완료라고 말해도 Play에서 counter가 변하지 않으면 실패입니다. 실제 현상과 Output Log를 기록하고, 먼저 원인을 진단하게 한 뒤 한 가지 좁은 수정만 요청하세요.
Gate 4: 승리와 재시작 추가
마지막 gameplay batch는 종료와 reset만 추가합니다.
counter가 3일 때만 끝 지점에서 승리를 표시한다. 3 미만이면 승리하지 않는다. R을 누르면 level을 재시작하고 player 위치, 세 개의 collectible, counter, 승리 UI를 초기화한다. 기존 경로와 input은 유지한다. 변경 사항과 5단계 Play checklist를 보고한다.
Play gate C:
- 2개만 가지고 도착: 승리하지 않음.
- 3개를 모아 도착: 승리 표시.
- 중간에
R: 모든 상태 초기화. - 승리 후
R: 모든 상태 초기화. - 다른 순서로 수집: 같은 올바른 결과.
이제야 첫 플레이 가능 level이 됩니다. 저장하고 commit한 뒤 외부 art가 없는 안정 그레이박스를 남기세요.
그레이박스 통과 후에만 Meshy 또는 Blender 추가
둘 다 선택 분기이지 기본 전제 조건이 아닙니다.
독특한 소품이 가치가 있을 때만 Meshy 사용
여전히 선택 branch입니다. Meshy 공식 MCP server는 유효한 MESHY_API_KEY가 필요합니다. API key는 대상 paid plan이 필요하고 API request는 prepaid API credits를 사용합니다. Web app에 표시된 plan이나 workspace allowance만으로 API access나 API balance가 충분하다고 판단하지 마세요. 생성 전에 meshy_check_balance를 호출하세요.
Bash의 Claude Code에서는 아래 local setup을 사용합니다. key는 숨겨 입력하고 chat에 붙이지 말며 생성된 local config를 commit하지 마세요.
read -rs MESHY_API_KEY && export MESHY_API_KEY
claude mcp add-json meshy "{\"command\":\"npx\",\"args\":[\"-y\",\"@meshy-ai/meshy-mcp-server\"],\"env\":{\"MESHY_API_KEY\":\"${MESHY_API_KEY}\"}}"
unset MESHY_API_KEY
이후 /mcp에서 meshy 연결을 확인하고 available Meshy tools를 나열한 뒤 meshy_check_balance를 호출하세요. 이 연결·잔액 확인은 generation task를 만들지 않습니다. key, plan, API balance가 맞지 않으면 여기서 중단하세요.
간단한 text-to-3D collectible 하나만 만듭니다.
- 짧고 구체적인
prompt와target_formats: ["glb"]로meshy_text_to_3d를 호출합니다. 이 단계는 texture 없는 preview입니다. preview 성공 후 texture가 별도 task 가치가 있을 때만meshy_text_to_3d_refine을 호출하세요. Refine은 새 task ID를 반환하므로 preview와 refine ID를 모두 보관하고, textured result의 status 확인과 download에는 refine ID를 task typetext-to-3d로 사용하세요. - 반환된 task ID와 task type
text-to-3d를 기록하세요. 자연어 chat 결과만 남기면 안 됩니다. - 같은 ID/type으로
meshy_get_task_status를 호출하세요.PENDING,IN_PROGRESS, tool의TIMEOUT은 실패가 아닙니다. status 확인 중 network 끊김,429,5xx도FAILED가 아닙니다. 같은 task ID를 나중에 다시 조회하고 중복 과금될 수 있는 새 task를 만들지 마세요. SUCCEEDED후에만 download합니다.FAILED면task_error를 읽고CANCELED면 중단합니다. 명확한 local source asset 경로에 저장하세요.
meshy_download_model
task_id: <same task ID>
task_type: "text-to-3d"
format: "glb"
save_to: "<absolute-project-path>/SourceAssets/Props/CollectibleMarker/marker.glb"
Blender나 Unreal import 전에 file이 실제로 있는지 확인하세요. Asset Retention에 따르면 Enterprise가 아닌 고객의 API asset은 최대 3일 보관됩니다. download URL만 저장하지 마세요.
Asset 검증 D(Meshy 선택 시에만): local GLB를 반복해서 열 수 있고 task ID, task type, prompt, final status, local path가 기록되어야 합니다. 아직 Unreal에 적합하다는 증거는 아닙니다.
정리할 이유가 명확할 때만 Blender 사용
수동 정리만으로 충분하며 모든 독자에게 또 다른 MCP를 요구하지 않습니다. Claude로 Blender를 제어하기로 선택한 경우에만 Blender 공식 MCP 페이지에서 공식 add-on, LLM client, MCP server를 설치하고, 수정 전에 scene object read-only inventory부터 수행하세요. 커뮤니티 ahujasid/blender-mcp의 port, tool 이름, setup을 섞지 마세요. 공식 MCP는 data guard 없이 LLM 생성 code를 실행하므로 민감한 data가 없는 system이나 VM을 사용하세요.
static collectible 하나에는 다음 최소 route를 사용합니다.
- Blender에서 **File → Import → glTF 2.0 (.glb/.gltf)**를 선택해
marker.glb를 엽니다. 목표 prop만 남기고 불필요한 geometry를 수동 삭제한 뒤 scale, orientation, origin, name, material을 확인합니다. - 편집 가능한 원본을 남기기 위해
<absolute-project-path>/SourceAssets/Props/CollectibleMarker/marker-clean.blend로 저장합니다. - 정리한 static prop만 선택하고 File → Export → glTF 2.0을 선택한 뒤 format을 **glTF Binary (.glb)**로 설정하고 Selected Objects, Apply Modifiers를 켜
.blend옆에marker-clean.glb로 저장합니다. - Unreal Content Browser에서
/Game/Assets/Props/Collectibles/를 만들거나 열고marker-clean.glb를 import합니다. Interchange import preview에서 대상 entry가 Static Mesh인지 확인하고 그 static prop만 import해 asset을 저장합니다. Static Mesh Editor에서 size를 점검하고 필요할 때만 simple collision을 추가하되 기존 overlap trigger를 대체하거나 방해하지 마세요. - Play를 통과한 collectible Blueprint/Actor를 열고 visible Static Mesh component의 mesh reference만 교체합니다. trigger volume, one-shot collection event, counter, win/restart logic, 배치 instance는 유지합니다. compile, save 후 다시 Play하세요.
Asset 검증 E(Blender/import branch 선택 시에만): .blend, 정리한 .glb, Unreal Static Mesh가 열리고 scale, orientation, origin, collision을 설명할 수 있으며 visible mesh만 바뀌고 Play 검증 A–C가 계속 통과해야 합니다.
증거 단계별 문제 해결
| 증상 | 먼저 확인 | 오해하지 말 것 |
|---|---|---|
/mcp가 connected지만 level을 못 읽음 | editor 실행, Output Log, 실제 read-only call | 게임 연결 성공 |
| server는 뜨지만 tool이 없음 | AllToolsets, 필요 시 ModelContextProtocol.RefreshTools | 모델 능력 부족 |
| call이 멈추거나 error | compile, level loading, active PIE | 무조건 network 문제 |
| Blueprint tool 응답은 있지만 gameplay 실패 | status, compile, Output Log, 수동 Play | 작업 완료 |
Meshy status 확인이 timeout, 끊김, 429, 5xx | task ID/type을 유지하고 같은 task를 나중에 조회 | FAILED 또는 새 paid task가 필요하다는 뜻 |
| download URL 만료 | local copy, task ID, retention | 영구 URL |
| import scale/collision 문제 | unit, origin, export, Unreal collision | 생성 model이 반드시 나쁨 |
같은 증상에 두 번 수정해도 나아지지 않으면 마지막 통과 checkpoint로 rollback하고 task를 더 작게 나누세요. 검증되지 않은 두 수정 위에 세 번째 추측을 쌓지 마세요.
사용량 장부를 세 개로 분리
“weekly Max의 19%”를 API token으로 바꾸지 마세요. 한 커뮤니티 작성자는 첫 전체 build에 약 4시간과 weekly Max plan의 약 19%가 들었다고 보고했습니다. 이는 한 사람의 한 project·설정에 대한 경험이지 시간, 가격, quota 보장이 아닙니다.
| 경로 | 별도 확인이 필수인 항목 | 포함하지 않는 것 | 증거 |
|---|---|---|---|
| Claude subscription으로 Claude Code | plan, session/weekly limit, active model | Meshy credits 또는 모델 API 청구 | Claude Code model·usage 화면 |
| 모델 API로 Claude Code | API key, 실제 model ID, input/output/cache token, 잔액 | Claude Max 주간 사용량 또는 Meshy | provider 요청·청구 기록; BetterToken은 model·token 기록 |
| 선택형 Meshy asset | MESHY_API_KEY, 대상 paid plan/API access, prepaid API balance, task별 사용량 | 모델 API token. Web app allowance는 API balance 증거가 아님 | meshy_check_balance, task·billing 기록 |
| Unreal, Blender, plugin, content | 최신 license, hardware, marketplace asset, third-party plugin | 전체 stack이 무료라는 가정 | 각 공급자의 최신 약관과 구매 기록 |
확장 전 한 level에서 prompt 수, retry, 모델 request, 선택한 경우의 Meshy task ID, download file, 사람의 Play 시간을 기록하세요. core는 Play 검증 A–C를 안정적으로 반복해야 합니다. D는 Meshy 선택 시에만, E는 Blender/import branch 선택 시에만 요구하세요. 실제 사용 branch가 안정된 뒤 확장하세요.
최종 체크리스트
- session 전과 각 통과 gate 뒤에 rollback 지점이 있다.
/mcp표시 외에 실제 read-only Unreal call이 성공했다.- Play에서 경로를 걷고, 정확히 3개를 모으고, 올바르게 승리하고, 어떤 상태에서도 재시작할 수 있다.
- 에셋 변경 전에 PIE를 멈추고, compile 완료 후 다음 단계로 갔다.
- Meshy와 Blender는 그레이박스 통과 전까지 선택 사항으로 유지했다.
- Meshy를 사용했다면 output을 local 저장하고 task ID, task type, final status를 기록했다.
- external asset으로 primitive를 교체했다면 Play 검증 A–C를 다시 했다.
- 실제 model, 모델 token, Claude subscription 한도, Meshy credits를 따로 확인했다.
그 결과는 눈길을 끄는 AI 데모에 그치지 않습니다. 실제로 작동하는 부분을 잃지 않으면서 복구할 수 있고, 관찰할 수 있으며, 단계적으로 확장할 수 있는 제작 절차가 됩니다.