Инструменты из этой статьи
В прошлый раз Claude построил мир внутри Unreal Engine 5.8 через новый нативный MCP — и самым популярным комментарием под тем видео с большим отрывом был: «Ладно, но можно ли сделать это с локальным, бесплатным ИИ с открытым исходным кодом?» Справедливый вопрос. Claude великолепен — ровно до тех пор, пока вы не посмотрите на счет.
Так что на этот раз: никакого облака, никакого API-ключа, никакой подписки. Qwen3.6-27B — 27 миллиардов параметров, около семнадцати гигабайт на одном потребительском GPU — подключен напрямую к запущенному Unreal Editor через тот же нативный MCP. Семнадцать промптов, и каждый до единого — новый чат: модель ничего не помнит между шагами. Режим размышлений выключен. И каждая задача в истории Cline заканчивается одним и тем же числом в углу: $0.00.

Главный вопрос заключался вовсе не в том, «может ли модель открыть редактор». Вопрос был в том, сможет ли локальная модель выдержать реальный проект: создать Blueprints, собрать HUD из 28 виджетов, подключить систему ввода и отловить собственный баг в недрах движка — или же развалится на первом вызове инструмента. Насколько нам известно, до этого никто не публиковал успешную сборку на локальной LLM через нативный MCP в UE; единственная публичная попытка, которую мы нашли, закончилась провалом в день запуска. Вот точный сетап, что именно получилось собрать и честный вердикт.
1. Модель: Qwen3.6-27B и железо, которое ей реально нужно
Наш выбор — Qwen3.6-27B, плотная модель с открытыми весами. Сейчас она входит в число лидеров среди открытых моделей в бенчмарках агентного кодинга, а в этом поколении улучшили вызов инструментов. Здесь использовалась сборка из репозитория unsloth GGUF с квантом UD-Q4_K_XL (UD = Unsloth Dynamic) — примерно 17 GB весов.

2. Запустите локально через llama.cpp (вся суть — в флагах)
Установите llama.cpp одной командой — в Windows это winget install llama.cpp — и запустите сервер. Флаг -hf при первом запуске скачивает нужный квант напрямую с Hugging Face, так что отдельного шага со скачиванием нет:
winget install llama.cpp # macOS/Linux: curl -LsSf https://llama.app/install.sh | sh
llama serve -hf unsloth/Qwen3.6-27B-GGUF:UD-Q4_K_XL -a Qwen3.6-27B \
--host 127.0.0.1 --port 1235 \
-ngl 99 -fa on -c 40960 \
--cache-type-k q8_0 --cache-type-v q8_0 \
--jinja --reasoning off \
--temp 0.7 --top-p 0.80 --top-k 20 --min-p 0.0 \
--presence-penalty 1.5 --repeat-penalty 1.0Разберём, что делает каждый блок: все они здесь не просто так.
-ngl 99 переносит каждый слой на GPU (99 просто означает «все до единого»). -fa on включает flash attention. -c 40960 — нативный максимум контекста Qwen3; уменьшите его, если не хватает VRAM. Флаги K/V-кэша q8_0 сжимают кэш внимания до 8 бит: расход памяти снижается почти вдвое, а качество практически не меняется.-a Qwen3.6-27B задает имя модели в API — именно эту строку вы позже введете в Cline. --reasoning off отключает режим размышлений: циклу агента нужен один быстрый вызов инструмента за ход, а не монолог — меньше задержка, никаких потраченных впустую токенов.--repeat-penalty 1.0, что означает выключено. По умолчанию в llama.cpp стоит 1.1, и этот штраф старого типа откровенно вредит Qwen.--jinja заставляет llama.cpp использовать нативный шаблон чата модели. Без него сервер не сможет разобрать теги, которые Qwen использует для форматирования вызовов инструментов, — и Cline не увидит ни единого вызова инструмента. Модель выглядит живой, охотно общается и не делает ровным счетом ничего в вашем редакторе. Если ваш локальный агент «разговаривает, но ничего не делает», этот флаг — первое, что нужно проверить.
3. Подключите Cline к своему серверу
Cline — это агентная обвязка: бесплатное расширение для VS Code с открытым исходным кодом. llama-server предоставляет эндпоинт, совместимый с OpenAI, поэтому Cline обращается к вашему GPU в точности так же, как к облачному API:
API Configuration
Provider OpenAI Compatible; Base URL http://127.0.0.1:1235/v1 (путь /v1 обязателен); Model Qwen3.6-27B — имя должно в точности совпадать со значением флага -a; API Key — любая непустая строка (сервер её никогда не проверяет, но Cline требует заполнить это поле). Context Window 40960 — такое же значение, как на сервере. Reasoning Effort None, что соответствует --reasoning off.
Функции, которые важны для агента в Unreal
Native Tool Call ON — используйте настоящий формат вызова инструментов модели вместо хаков с промптами. Parallel Tool Calling OFF — вы все равно не сможете работать в Unreal Editor параллельно; здесь все делается строго по одной операции за раз. Auto Compact OFF — здесь один чат равен одной задаче, поэтому длинной истории для сжатия тут никогда не бывает.
Yolo Mode ON (необязательно, но в этом вся суть)
Yolo Mode автоматически одобряет каждый вызов инструмента — локальный эквивалент bypass-permissions. С облачным агентом каждый запрос «proceed?» требует вашего внимания и денег; здесь модель ваша, так что дайте ей работать.

4. Подключаем к Unreal Engine 5.8
Со стороны Unreal — тот же нативный сервер MCP, который мы разбирали в предыдущей главе: включите плагин, активируйте Auto Start Server, и редактор будет слушать запросы по адресу http://127.0.0.1:8000/mcp. (Плагин MCP всё еще помечен как Experimental, и временами это заметно — подробнее об этом ниже.) Единственная новая деталь — сообщить о нем Cline в cline_mcp_settings.json:
{
"mcpServers": {
"unreal-mcp": {
"type": "streamableHttp",
"url": "http://127.0.0.1:8000/mcp"
}
}
}Первая задача в чистом чате: «проверь подключение MCP к Unreal Engine». Самый первый вызов execute_python_code завершился ошибкой AttributeError — некорректный вызов Python API. И это был первый по-настоящему обнадеживающий момент: модель прочитала traceback, поняла, что подключение в порядке и дело только в ее коде, и повторила попытку с исправленным кодом. Спустя восемь миллисекунд: «MCP connection to Unreal Engine: SUCCESSFUL».

Локальная модель без памяти между задачами полностью зависит от своего файла правил. Этот файл — BurgerTower_SystemPrompt.md — содержит соглашения проекта, заметки по API редактора, правила компиляции и ловушки движка, на каждую из которых иначе ушло бы по отдельному промпту (переменные float нужно объявлять с типом real, иначе они молча превратятся в int; одна система на один вызов инструмента; компилировать дважды, чтобы убрать предупреждение о значениях по умолчанию). Закиньте его в свой проект и адаптируйте.
5. Стресс-тест: полноценная игра за 17 промптов
Наш проект — BurgerTower, аркада про строительство башни с управлением одной кнопкой. Кусок еды раскачивается над растущей башней; нажмите, чтобы его сбросить. Точное приземление дает бонус и брызги мясного сока; накренившаяся башня падает, и попытка заканчивается. С каждым этажом камера поднимается всё выше — город, облака, стратосфера, космос. В проекте есть только арт: восемь мешей еды, текстура панорамы и пустая карта студии. Все Blueprint, графы, виджеты, ассеты ввода, материалы и эффекты модель должна создать сама, прямо в редакторе, через Python.

И ещё одно правило, которое превращает это в настоящий бенчмарк, а не просто в демо: каждый промпт — это абсолютно новая задача в Cline с чистым контекстом. Модель ничего не помнит между шагами — всю необходимую связь обеспечивают сами промпты, как если бы заказы выдавали подрядчику, который каждое утро просыпается с амнезией. Всего семнадцать заказов.
Промпты 1–6: весь скелет без единого нажатия Play
Первые шесть промптов собирают каждую часть отдельно и проверяют её только компиляцией: актор падающего куска с его профилем физики и пулом мешей (меш ОБЯЗАН быть корневым компонентом — физика симулирует корень, и меш, прикреплённый к пустому корню, оторвётся в тот же миг, когда активируется физика); его граф событий, где событие Hit с тройной фильтрацией превращает физическое касание ровно в один сигнал «я приземлился»; эффект всплеска Niagara, продублированный из шаблона движка; pawn камеры с 19 переменными состояния; и HUD.

HUD заслуживает отдельного предложения: 28 виджетов — карточка счета, золотая плашка BEST, всплывающие плашки PERFECT!/COMBO, высотомер с отметками CITY/CLOUDS/STRATOSPHERE/SPACE и полноценный экран смерти с кнопкой RETRY — были размещены, привязаны к анкорам, покрашены и стилизованы целиком в коде, за два вызова инструмента, без единого клика в дизайнере UMG. Второй вызов представлял собой один непрерывный блок кода, который локальная модель стримила около двух с половиной минут. И он скомпилировался без единой ошибки.
Промпты 7–13: связываем всё воедино, первый Play, первый game over
Второй эпизод связывает части в порядке зависимостей: сначала обработчик приземления на pawn, затем основной цикл в Tick (синусоида раскачивания, плавный подъём камеры, покадровое обновление HUD, проверка проигрыша на основе физики), ассеты Enhanced Input, инициализацию в BeginPlay и игровой режим — включая коварную ловушку: после назначения default pawn игровой режим необходимо перекомпилировать, иначе Play продолжит спавнить стандартный pawn движка. Модель выполнила перекомпиляцию и повторно считала значение для проверки. Первый Play за всю серию случается только после промпта 11: pawn спавнится, HUD появляется с нулями, над базовой булочкой раскачивается кусок.

Промпт 12 — это кнопка сброса: определить в момент нажатия, было ли попадание идеальным, разбудить физику детали, подтянуть камеру, заспавнить следующую деталь — и самый большой блок кода во всей серии: около трёх минут стриминга, затем три с половиной минуты компиляции графа движком. В середине задачи эндпоинт MCP оборвал сессию; Cline сам повторно отправил точно такой же вызов, и сборка продолжилась. Подобные сбои доставки случались за проект трижды, и агент каждый раз сам восстанавливался на камеру. Затем: Play, первый сброс, серия «PERFECT! x4», накренившаяся башня, падение на 5,316 метрах, GAME OVER, RETRY — весь игровой цикл работает. Промпт 13 — классическая настройка ощущений от игры: увеличить амплитуду раскачивания, ускорить его, расширить FOV с 70 до 80.

Промпты 14–15: шейдер по формуле и подготовка к выпуску
Промпт 14 — демонстрация силы: собрать материал задника в коде — около 18 нод материала через MaterialEditingLibrary — с маппингом высокой панорамной текстуры в экранном пространстве, где видимое окно смещается вверх синхронно с подъёмом камеры. Чистая шейдерная математика, заданная формулой в промпте и перенесённая моделью в связи между нодами. На этой задаче также возникла единственная настоящая заминка за всю серию: ответ потерялся при передаче, повторная попытка столкнулась с ассетом, который первый вызов уже успел создать, и Unreal выдал диалоговые окна перезаписи. Модель не зациклилась — она сделала вывод, что материал уже существует, и перешла ко второй части. Промпт 15 — подготовка к выпуску: подключить единственный провод exec, намеренно оставленный неподключённым с промпта 7 (вспышка идеального попадания, оставленная за своим гейтом), перекрасить эффект в коричневый цвет мясного сока и проверить все ассеты — их восемь, и все компилируются без ошибок.

Промпт 16: настоящий баг — и момент, который отвечает на вопрос в заголовке
После подготовки к выпуску всплеск от идеального попадания в игре по-прежнему рендерился белым — хотя отчёты инструментов были зелёными, а значения цвета в ассете удалось проверить. Промпт 16 отдаёт модели эту загадку: выяснить, почему цвет так и не попал на экран. Диагноз, который она поставила, — самый блестящий момент за весь проект: Niagara компилирует системы в фоновом режиме, и игра всё это время воспроизводила старую скомпилированную копию эффекта. Её решение: заново выставить цвет на всех трёх эмиттерах, сохранить и принудительно запустить пересборку, открыв систему в редакторе. Следующий запуск Play: два идеальных попадания, тёмно-коричневые брызги с искрами. Это не повторение действий из урока по шаблону — модель рассуждает о пайплайне ассетов движка.
Промпт 17 — это десерт: импортировать новую панораму — гигантскую чавкающую голову над городом бургеров — и перенаправить на неё семплер материала. Один импорт, одна перепривязка; вся математика сдвига завязана на скалярные параметры, которые не затрагивают текстуру, так что задник сменился в реальном времени прямо во вьюпорте посреди сессии.

6. Честный вердикт
- Она выдержала реальный проект. Семнадцать промптов с чистым контекстом, все системы скомпилировались без ошибок, один настоящий баг на уровне движка диагностирован и устранён. Каркас игры был собран без единого нажатия Play.
- Она работает медленнее передовых облачных моделей. Большие блоки кода генерируются от двух до трёх минут на одном потребительском GPU, а самый тяжёлый граф потребовал ещё ~3.4 минуты на компиляцию движком. Закладывайте на это спокойный вечер, а не обеденный перерыв.
- Обвязка действительно работает. Cline трижды повторно отправлял оборвавшиеся вызовы MCP; модель восстановилась после собственного ошибочного вызова API и справилась с повторной попыткой после конфликта ассетов. Будьте готовы к сбоям экспериментального MCP endpoint: цикл обработки должен с ними справляться.
- Именно промпты несут тот интеллект, за который вы не платите. Чёткие брифы строго по одной системе за раз плюс файл с правилами — вот что заставляет локальную модель без памяти действовать на уровне сеньора. Размытые промпты проверки практикой не выдержат.
- Заменит ли она Claude? Для структурированной сборки вроде этой — абсолютно, при $0.00 затрат на API она справилась с задачей. Для хаотичной работы с нечёткими требованиями передовая модель всё ещё даёт запас гибкости, которого у локальной 27B-модели нет. Выбирайте под проект, а не из идеологических соображений.

И да, нумерология сходится: 17 промптов, модель весом ~17 GB и финальная башня высотой 17.7 километра — за границей космоса, прямо в открытом рту гиганта, с полноценным экраном game over. И каждый шаг обошёлся ровно в $0.00.
Что вы получаете на самом деле
Вот и весь пайплайн: одна команда llama.cpp, одна страница настроек Cline, одна запись MCP — и локальная модель управляет тем же редактором, что и облачные агенты. Инструменты генерации для таких проектов постоянно меняются; когда появляются новые, они сразу попадают в Arena, чтобы вы могли сравнить их вслепую, прежде чем сделать выбор. Предыдущие части этой истории смотрите в Unreal Engine 5.8 Native MCP + Claude и Claude Code + Unreal Engine 5.
Посмотрите, как создавалась игра
Вся настройка и все 17 промптов, от начала до конца, на YouTube.