Первый играбельный уровень Unreal с Claude Opus 5.5
Пошаговый процесс для независимого разработчика: подтвердить живое соединение с Unreal, собрать и вручную проверить уровень с тремя предметами, победой и перезапуском, а затем решить, нужны ли Meshy и Blender.
Содержание

Практический совет: не подключайте Claude Code, Unreal, Meshy и Blender одновременно в первый день. Сначала докажите, что Claude Code действительно читает запущенный Unreal Editor. Затем соберите на примитивах серый прототип, по которому можно пройти, собрать три предмета, победить и перезапустить уровень. Каждый этап проверьте своими руками в Play. Только после стабильного игрового цикла решайте, нужен ли генератор 3D-моделей или очистка в Blender.
Это руководство составлено по актуальной документации, а не по результатам запуска вашего проекта автором. Epic по-прежнему помечает Unreal MCP как Experimental и предупреждает, что функции, API и форматы данных могут меняться. Поэтому здесь соединение MCP, успешный ответ инструмента и реально работающая игра считаются тремя разными доказательствами.
Подходит ли вам такой способ
Он лучше всего работает для самостоятельного разработчика, который знает основы Unreal, умеет читать структуру проекта, использует контроль версий и готов запускать Play после каждого небольшого изменения. Claude ускоряет понятные операции, но не способен сам решить, удобны ли управление, камера, коллизии и игровой ритм.
| Ситуация | Рекомендация |
|---|---|
| Вы понимаете проект, можете просмотреть изменения и протестировать их | Начните с минимального серого прототипа ниже |
| Нужно проверить только игровой цикл | Оставьте примитивы Unreal; пока не подключайте Meshy и Blender |
| Нет резервной копии и точки отката | Сначала сделайте копию и контрольную версию |
| Ожидаете готовую игру из одного запроса | Разбейте цель на наблюдаемые системы |
| Нужно только сдвинуть Actor или изменить одно число | Обычно быстрее сделать это вручную |
Anthropic описывает Opus 5.5 как модель для сложного программирования и длительной агентной работы. Это не делает визуальный результат самопроверяемым. Пусть модель читает, планирует и выполняет, а человек утверждает изменения, наблюдает и проводит Play-тест.
Сначала определите минимальный результат
В этой статье у результата всего четыре требования:
- Игрок появляется у
Player Startи может пройти по ясному маршруту к финишу. - Три заметных предмета увеличивают счётчик ровно один раз: 0, 1, 2, 3.
- Победа срабатывает только после сбора всех трёх предметов.
- Клавиша
Rвосстанавливает позицию игрока, предметы, счётчик и состояние победы.
Запишите это в задании проекта. Для каждой порции изменений фиксируйте: что изменили, ожидаемый результат, фактический результат и решение «принято/не принято». Connected не означает «можно играть». Компиляция не означает «можно играть». Принятый сервером запрос не означает «можно играть». Соответствующий этап подтверждает только ручной Play-тест.
Этап 1: Claude Code и официальный Unreal MCP
Создайте точку восстановления
Сохраните проект и сделайте commit либо shelve. Официальный плагин Epic даёт Claude широкий доступ к работающему редактору, включая выполнение Python внутри процесса. README предлагает относиться к этому как к запуску сгенерированного помощником произвольного кода: сохраняться перед длинными сессиями и просматривать diff.
Не используйте --dangerously-skip-permissions в важном проекте. Первую попытку проводите в копии, песочнице или одноразовой ветке.
Включите оба плагина Unreal
Эта инструкция опирается на текущую официальную страницу Unreal MCP, опубликованную в разделе Unreal Engine 5.8 Documentation. Предполагается, что именно ваша сборка движка содержит Unreal MCP (ModelContextProtocol) и All Toolsets (AllToolsets). Не переносите это утверждение на все версии UE5. Если одного из пунктов нет в списке плагинов, остановитесь и используйте сборку, которую охватывает документация Epic, а не подменяйте официальный MCP сторонним.
Дальше следуйте официальной последовательности:
- В Edit → Plugins включите Unreal MCP.
- Включите All Toolsets. Без него сервер может запуститься, но не предоставить рабочих инструментов.
- Перезапустите editor.
- В Editor Preferences включите Auto Start Server либо выполните в консоли editor:
ModelContextProtocol.StartServer
Локальный endpoint по умолчанию — http://127.0.0.1:8000/mcp. По умолчанию у него нет аутентификации, и он не предназначен для удалённого доступа. Не пробрасывайте этот порт в интернет и не используйте сервер на общей машине.
Сгенерируйте конфигурацию Claude Code
В консоли Unreal выполните:
ModelContextProtocol.GenerateClientConfig ClaudeCode
Launcher-сборка обычно создаёт .mcp.json рядом с .uproject; исходная сборка может записать его в корень рабочего пространства рядом с Engine/. После смены порта сгенерируйте файл заново. Запускайте Claude Code из корня, где лежит конфигурация.
Установите официальный плагин Epic:
/plugin install unreal-engine-skills-for-claude-code@claude-plugins-official
Если официальный marketplace не найден, сначала добавьте его:
/plugin marketplace add anthropics/claude-plugins-official
Не смешивайте доступ к модели с Unreal и Meshy
Claude Code может работать через аккаунт Anthropic или совместимый API. При использовании BetterToken актуальная инструкция для Claude Code требует установить ANTHROPIC_BASE_URL в https://bettertoken.ai без /v1 и локально задать ANTHROPIC_AUTH_TOKEN. Настоящий ключ нельзя вставлять в чат, коммитить в репозиторий или сохранять в материалах статьи.
Официальный ID модели Anthropic — claude-opus-5-5. При работе через BetterToken скопируйте точный ID из актуального Model Plaza и убедитесь, что он доступен выбранной группе ключа; после запуска проверьте реальную маршрутизацию через /model и журнал запросов провайдера, а не полагайтесь на старую конфигурацию.
Проверяйте живой read-only вызов
Нужны все четыре проверки:
/pluginпоказывает официальный Unreal-плагин;/mcpпоказываетunreal-mcp;- в Unreal Output Log нет ошибки порта или зависимости;
- read-only запрос возвращает реальное имя уровня, основные Actor и наличие
Player Start.
Последний пункт подтверждает доступность редактора. Epic отдельно отмечает: подключённый proxy или закэшированные инструменты не доказывают, что живой вызов Unreal сейчас сработает.
Этап 2: только проходимый серый прототип
Начните с уже работоспособной третьеличной основы. Player Start задаёт точку появления, но сам по себе не создаёт управляемого персонажа, GameMode, ввод или камеру. Для нового проекта возьмите шаблон Unreal Third Person. В существующем проекте проверьте, что активный GameMode создаёт управляемый third-person Pawn, движение и follow camera работают, а на уровне есть Player Start.
До любых изменений геометрии через MCP нажмите Play, а не Simulate. Убедитесь, что персонаж действительно появляется, WASD двигает его, мышь управляет камерой; затем остановите PIE. Если хотя бы один пункт не проходит, сначала исправьте базовый проект и не маскируйте проблему запросом на greybox.
После успешной проверки попросите Claude только прочитать текущий уровень, GameMode, персонажа и доступные toolsets, затем перечислить план и изменяемые assets. При нехватке инструмента задача должна остановиться, а не незаметно перейти на другую реализацию. Граница задачи может быть такой:
На основе третьеличного проекта, уже прошедшего Play-проверку, построй минимальный greybox в текущем уровне. Сохрани существующие player character, GameMode, input mappings и камеру; не заменяй и не пересоздавай их. Из примитивов сделай пол, границы, один понятный маршрут и отметку финиша. Не добавляй врагов, художественные assets или сложный UI. Перечисли каждый созданный или изменённый asset. Остановись, если отсутствует нужный tool, компиляция не прошла или результат не содержит явного success.
Во время выполнения:
- Последовательно выполняйте зависимые изменения одного asset или состояния editor.
- Дожидайтесь окончания компиляции C++, Blueprint или shader; принятие вызова ещё не означает готовую компиляцию.
- Читайте статус каждого результата и останавливайтесь, если нет явного успеха.
Play-проверка A: снова нажмите Play, начните персонажем, созданным у Player Start, и пройдите весь маршрут. Нельзя выйти за границы, застрять в узком месте или перепрыгивать невидимое препятствие. Исправляйте только наблюдаемую проблему, не меняя попутно камеру, материалы или маршрут.
После успеха сохраните проект, сделайте commit и отметьте точку восстановления.
Этап 3: три предмета для сбора
Следующая порция добавляет только правило сбора и не меняет принятую геометрию:
Размести вдоль пути три хорошо заметных и разделённых предмета. Касание должно срабатывать один раз, после чего предмет скрывается или удаляется, а читаемый счётчик меняется от 0 до 3. Не двигай Player Start, путь, границы и финиш. Перечисли задействованные Blueprint, переменные, события и UI, затем дай Play-чек-лист.
Play-проверка B: собрать предметы в прямом и обратном порядке; каждый учитывается один раз; значения идут 1, 2, 3; повторный проход по старому месту не меняет счёт; новая сессия Play начинается с 0.
Если Claude пишет «готово», но счётчик в Play не меняется, этап не пройден. Запишите фактический результат и Output Log, затем попросите сначала найти причину и только потом сделать одно узкое исправление.
Этап 4: победа и перезапуск
Последняя игровая порция добавляет только завершение и сброс:
Финиш показывает победу только при счётчике 3. При меньшем значении победа не срабатывает. Клавиша R перезапускает уровень и восстанавливает позицию игрока, все три предмета, счётчик и UI победы. Сохрани существующий путь и ввод. Перечисли изменения и дай пятишаговый Play-чек-лист.
Play-проверка C:
- Дойти до финиша с двумя предметами — победы нет.
- Собрать три и дойти — победа есть.
- Нажать
Rв середине — всё восстановилось. - Нажать
Rпосле победы — всё восстановилось. - Собрать предметы в другом порядке — результат тот же.
Только теперь это первый играбельный уровень. Сохраните его, сделайте commit и оставьте стабильную версию без внешней графики.
Meshy и Blender — только после серого прототипа
Это дополнительные ветки, а не обязательная основа.
Meshy — когда действительно нужен особый объект
Это по-прежнему необязательная ветка. Официальный Meshy MCP server требует действующий MESHY_API_KEY; API key доступен при подходящем платном тарифе, а API-запросы расходуют предоплаченные API credits. Показанный в web-приложении тариф или лимит workspace сам по себе не доказывает доступность API и достаточный баланс. До генерации вызовите meshy_check_balance.
Для Claude Code в Bash используйте локальную настройку ниже. Введите ключ скрыто, не вставляйте его в чат и не коммитьте созданную локальную конфигурацию:
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, попросите перечислить доступные Meshy tools и вызовите meshy_check_balance. Эти проверки соединения и баланса не создают задачу генерации. Если key, тариф или API-баланс не подходят, остановитесь здесь.
Для начала сделайте один простой collectable через text-to-3D:
- Вызовите
meshy_text_to_3dс коротким точнымpromptиtarget_formats: ["glb"]. Результат этой стадии — preview без текстуры.meshy_text_to_3d_refineнужен только после успешного preview и только если текстура оправдывает отдельную задачу. Refine возвращает новый task ID: сохраните ID preview и refine, а для проверки статуса и скачивания текстурированного результата используйте ID refine с task typetext-to-3d. - Сохраните возвращённый task ID и тип
text-to-3d. Одного текстового ответа в чате недостаточно. - Вызывайте
meshy_get_task_statusс тем же ID и type.PENDING,IN_PROGRESSиTIMEOUTсамого инструмента не означают провал. Разрыв сети,429или5xxпри проверке статуса также не превращают задачу вFAILED: позже запросите тот же task ID, а не создавайте дублирующую платную задачу. - Скачивайте только после
SUCCEEDED. ПриFAILEDпрочитайтеtask_error, приCANCELEDостановитесь. Сохраните результат в явно заданный локальный каталог исходных assets, например:
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 убедитесь, что файл действительно существует. По правилам Asset Retention модели API для клиентов не Enterprise хранятся не более трёх дней, поэтому одного URL недостаточно.
Проверка asset D — только если выбран Meshy: локальный GLB стабильно открывается; записаны task ID, task type, prompt, финальный статус и путь. Это ещё не доказывает готовность asset для Unreal.
Blender — только для конкретной очистки
Для этой ветки достаточно ручной очистки; ещё один MCP не является обязательным. Только если вы сознательно выбираете управление Blender через Claude, установите официальный add-on, LLM client и MCP server со страницы Blender MCP и сначала выполните read-only инвентаризацию объектов сцены. Не смешивайте её с портами, названиями tools и установкой сообщества ahujasid/blender-mcp. Blender предупреждает, что официальный MCP выполняет созданный LLM код без защитных механизмов для данных, поэтому используйте VM или систему без чувствительной информации.
Для одного статического collectable используйте простой маршрут:
- В Blender выберите File → Import → glTF 2.0 (.glb/.gltf) и откройте
marker.glb. Оставьте только нужный объект, вручную удалите лишнюю геометрию и проверьте масштаб, ориентацию, origin, имена и материалы. - Сохраните очищаемый исходник как
<absolute-project-path>/SourceAssets/Props/CollectibleMarker/marker-clean.blend, чтобы осталась редактируемая и восстанавливаемая версия. - Выделите только очищенный статический объект, выберите File → Export → glTF 2.0, задайте формат glTF Binary (.glb), включите Selected Objects и Apply Modifiers и сохраните
marker-clean.glbрядом с.blend. - В Content Browser Unreal создайте или откройте
/Game/Assets/Props/Collectibles/и импортируйтеmarker-clean.glb. В окне предварительного просмотра Interchange убедитесь, что нужная запись имеет тип Static Mesh, импортируйте только этот статический объект и сохраните asset. В Static Mesh Editor проверьте размер; простую collision добавляйте только при необходимости и не позволяйте ей заменить или сломать существующий overlap trigger. - Откройте Blueprint или Actor collectable, уже прошедший Play, и замените только ссылку видимого Static Mesh component. Сохраните trigger volume, одноразовое событие сбора, счётчик, победу, перезапуск и размещённые экземпляры. Скомпилируйте, сохраните и снова запустите Play.
Проверка asset E — только если выбрана ветка Blender/импорта: .blend, очищенный .glb и Unreal Static Mesh открываются; масштаб, ориентация, origin и collision объяснимы; видимый mesh заменён без изменения игровой логики; Play-проверки A–C снова проходят.
Диагностика по уровню доказательств
| Симптом | Сначала проверить | Не считать этим |
|---|---|---|
/mcp connected, но уровень не читается | Запущен ли editor, Output Log, настоящий read-only вызов | Рабочее соединение с игрой |
| Сервер есть, инструментов нет | AllToolsets, затем при необходимости ModelContextProtocol.RefreshTools | Слабость модели |
| Вызовы зависают | Компиляция, загрузка уровня, активный PIE | Обязательно сеть |
| Blueprint-инструмент ответил, но игра сломана | Статус, компиляция, Output Log, ручной Play | Завершённость |
Проверка Meshy завершилась timeout, разрывом, 429 или 5xx | Сохранить task ID/type и позже запросить ту же задачу | FAILED или повод создать вторую платную задачу |
| URL загрузки истёк | Локальная копия, task ID, срок хранения | Постоянная ссылка |
| Неверный масштаб или collision | Единицы, origin, экспорт, настройки Unreal | Обязательно плохая генерация |
После двух безрезультатных исправлений откатитесь к последней принятой точке и уменьшите задачу. Не накладывайте третью гипотезу поверх двух непроверенных.
Три независимых учёта расхода
Нельзя переводить «19% weekly Max» в API-токены. Один автор сообщества указал около четырёх часов и примерно 19% недельного Max для своей первой полной сборки. Это личный отчёт по конкретному проекту, а не обещание времени, цены или лимита.
| Путь | Что обязательно проверять отдельно | Чего сюда не входит | Доказательство |
|---|---|---|---|
| Claude Code с подпиской Claude | Уровень подписки, лимит сессии/недели, активная модель | Meshy credits и счёт API | Интерфейс модели и использования Claude Code |
| Claude Code через модельный API | API key, реальный model ID, input/output/cache tokens, баланс | Недельный Max и Meshy | Журнал запросов и биллинг; в BetterToken — записи модели и токенов |
| Дополнительные ресурсы Meshy | MESHY_API_KEY, подходящий платный тариф/API-доступ, предоплаченный API-баланс и расход каждой задачи | Токены модельного API; лимит web-приложения не доказывает API-баланс | meshy_check_balance, задачи и биллинг Meshy |
| Unreal, Blender, плагины и контент | Лицензии, оборудование, marketplace-ресурсы, сторонние плагины | Вывод, что весь набор бесплатен | Актуальные условия и чеки каждого поставщика |
До масштабирования измерьте один уровень: число запросов, повторов, модельных вызовов, необязательные Meshy task ID, скачанные файлы и время ручного Play. Основной процесс должен стабильно повторять Play-проверки A–C; D требуется только при выборе Meshy, а E — только при выборе Blender/импорта. Расширяйте процесс после стабильной проверки тех веток, которые действительно используете.
Итоговый чек-лист
- Есть точка отката до сессии и после каждого принятого этапа.
- Помимо зелёного
/mcp, успешно выполнен реальный read-only вызов Unreal. - В Play можно пройти маршрут, собрать ровно три предмета, корректно победить и перезапуститься из любого состояния.
- PIE остановлен перед изменением ресурсов, компиляция завершена перед следующим шагом.
- Meshy и Blender остаются опциональными до рабочего серого прототипа.
- Если использован Meshy, результат сохранён локально, а task ID, task type и финальный статус записаны.
- Если примитив заменён внешним asset, повторены Play-проверки A–C.
- Фактическая модель, модельные токены, лимит подписки Claude и Meshy credits сверяются отдельно.
Так получается не просто эффектная AI-демонстрация, а восстанавливаемый и проверяемый процесс, который можно безопасно повторять и расширять.