前回、Claude は新しいネイティブ MCP を通じて Unreal Engine 5.8 の中に 世界を構築しました——そしてあの動画に寄せられたトップコメントは、圧倒的に これでした:「わかった、でもこれをローカルで無料のオープンソース AI で できる?」 もっともな質問です。Claude は素晴らしい——請求書を見るまでは。
だから今回は:クラウドなし、API キーなし、サブスクリプションなし。 Qwen3.6-27B——270 億パラメータ、コンシューマー GPU 1 枚に載る約 17 ギガバイト——を、 同じネイティブ MCP を通じてライブの Unreal エディターへ直結します。プロンプトは 17 回、そのすべてが新規チャット:モデルはステップ間で何も覚えていません。 思考モードはオフ。そして Cline の履歴のすべてのタスクの隅には、同じ数字が 並びます:$0.00。

本当の問いは「エディターを開けるか」では決してありませんでした。ローカルモデルが本物のプロジェクトを生き延びられるか:ブループリントを書き、 28 ウィジェットの HUD を組み、入力システムを配線し、エンジンの奥底で自分のバグを 狩り出せるのか——それとも最初のツール呼び出しで崩れるのか。私たちの知る限り、 UE のネイティブ MCP を通じたローカル LLM ビルドの成功例はこれ以前に公開されて おらず、見つかった唯一の公開の試みは公開当日に失敗に終わっていました。ここに 正確なセットアップ、作られたもの、そして正直な評決を記します。
1. モデル:Qwen3.6-27B と、実際に必要なハードウェア
選んだのは Qwen3.6-27B——オープンモデルの中でエージェンティック コーディングのベンチマーク上位に現在位置する dense なオープンウェイトモデルで、 この世代にはツール呼び出しの改善が組み込まれています。ここで使った正確なビルドは 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 はフラッシュアテンションを有効化。-c 40960 は Qwen3 のネイティブコンテキスト上限——VRAM が厳しければ下げてください。q8_0 の K/V キャッシュフラグはアテンションキャッシュを 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 はクラウド API とまったく同じ 感覚であなたの GPU と話します:
API Configuration の設定
プロバイダーは 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 エディターは並列作業できません。一度に一操作です。Auto Compact OFF——ここでは一チャット一タスクなので、圧縮 すべき長い履歴はそもそも生まれません。
Yolo Mode ON(任意、でもこれが醍醐味)
Yolo Mode はすべてのツール呼び出しを自動承認——bypass-permissions のローカル版 です。クラウドエージェントでは「続行しますか?」のたびに注意力とお金を 払いますが、ここではモデルはあなたのもの。走らせましょう。

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"
}
}
}最初のタスクは、新規チャットで:「check mcp connection to unreal engine.」 最初の execute_python_code 呼び出しは AttributeError で失敗——誤った Python API 呼び出しです。そしてこれが最初の 本当に心強い瞬間でした:モデルはトレースバックを読み、接続自体は問題 なく自分のコードだけが間違っていると自力で結論づけ、修正したコードで再試行した のです。8 ミリ秒後:「MCP connection to Unreal Engine: SUCCESSFUL.」

タスク間の記憶を持たないローカルモデルは、ルールファイルが生命線です。この BurgerTower_SystemPrompt.md には、プロジェクトの規約、エディター API のメモ、コンパイルの作法、そして 放っておけばプロンプトを一つずつ食い潰すエンジンの罠(float は型 real で宣言しないと無言で int になる。ツール呼び出しごとに一システム。デフォルト値警告を消すには二度 コンパイル)が詰まっています。プロジェクトに置いて、調整してください。
5. ストレステスト:17 プロンプトで完全なゲームを
プロジェクトは BurgerTower——ワンボタンのアーケード積み上げ ゲームです。食べ物が伸びていくタワーの上で揺れ、タップで落とす。きれいに着地 すればボーナスと肉汁のスプラッシュ。傾いたタワーは倒れてランが終わります。 フロアを重ねるごとにカメラは高く——街、雲、成層圏、宇宙へ。プロジェクトに 入っているのはアートのみ:8 つの食べ物メッシュ、パノラマテクスチャ、 空のスタジオマップ。ブループリント、グラフ、ウィジェット、入力アセット、 マテリアル、エフェクトのすべては、モデルが Python を通じてライブのエディター内で 書き上げます。

そしてこれをデモではなく本物のベンチマークにするルールが一つ: すべてのプロンプトは、まっさらなコンテキストの新規 Cline タスク。モデルはステップ間で何も覚えていません——継続性はプロンプト自身が運びます。 毎朝記憶喪失で目覚める請負業者に渡す発注書のように。発注は全部で 17 件。
プロンプト 1〜6:Play を一度も押さずに骨格まるごと
最初の 6 プロンプトは各パーツを個別に作り、コンパイルのみで検証します: 物理プロファイルとメッシュプールを持つ落下ピースのアクター(メッシュがルート コンポーネントそのものでなければならない——物理はルートをシミュレート するので、空のルートにぶら下がったメッシュは物理が目覚めた瞬間にちぎれます)。 三重フィルターの Hit イベントが物理接触を正確に一回の「着地した」シグナルへ 変えるイベントグラフ。エンジンテンプレートから複製した Niagara バースト。19 個の 状態変数を持つカメラポーン。そして HUD。

HUD には一文を割く価値があります:28 ウィジェット——スコア カード、金色の BEST ピル、PERFECT!/COMBO の表示、CITY/CLOUDS/STRATOSPHERE/SPACE の目盛り付き高度ゲージ、RETRY ボタン付きの完全なデス画面——を、UMG デザイナーを 一度もクリックせず、ツール呼び出し 2 回で、すべてコードでレイアウトし、 アンカーし、彩色し、スタイリング。2 回目の呼び出しは、ローカルモデルが約 2 分半 ストリーミングし続けた一続きのコードブロックでした。クリーンにコンパイルされました。
プロンプト 7〜13:配線、初めての Play、初めてのゲームオーバー
第二幕は依存順にパーツをつなぎます:まずポーン側の着地レシーバー、次に Tick の ハートビート(スイングのサイン波、滑らかなカメラ上昇、フレームごとの HUD 更新、 物理駆動の失敗チェック)、Enhanced Input アセット、BeginPlay のブートストラップ、 そしてゲームモード——デフォルトポーンを設定した後はゲームモードを再コンパイルしなければ、Play がエンジン標準のポーンを出し続けるという微妙な罠も含めて。 モデルは再コンパイルし、値を読み戻して検証しました。シリーズ全体で最初の Play は プロンプト 11 の後にようやく訪れます:ポーンがスポーンし、HUD がゼロで立ち上がり、 ピースがベースのバンズの上で揺れる。

プロンプト 12 はドロップボタンです——押した瞬間にパーフェクトを判定し、ピースの 物理を起こし、カメラを一段引き上げ、次のピースをスポーンする——そしてシリーズ 最大のコードブロック:約 3 分のストリーミング、続いてエンジンがグラフを コンパイルする 3 分半。タスクの途中で MCP エンドポイントがセッションを落とし ましたが、Cline がまったく同じ呼び出しを自力で再送し、ビルドは 続行。この種の配送失敗はプロジェクト全体で 3 回起き、エージェントはそのすべてを カメラの前で自己修復しました。そして:Play、最初のドロップ、「PERFECT! x4」の ストリーク、傾くタワー、5,316 メートルでの倒壊、GAME OVER、RETRY——ゲーム ループ全体が動いています。プロンプト 13 は定番の手触り調整:スイングを 広げ、速くし、FOV を 70 から 80 へ。

プロンプト 14〜15:数式から組んだシェーダー、そしてリリースパス
プロンプト 14 は見せ場です:背景マテリアルをコードで構築—— MaterialEditingLibrary 経由で約 18 のマテリアルノード——縦長のパノラマテクスチャを スクリーンスペースでマッピングし、見える窓がカメラの上昇に同期して上へスライド します。純粋なシェーダー数学を、プロンプトに数式として書き、モデルがノード配線に 書き起こしました。このタスクはシリーズ唯一の本当のつまずきも生みました: レスポンスが途中で失われ、リトライが最初の呼び出しの既に作ったアセットと衝突し、 Unreal が上書きダイアログを出したのです。モデルはループしませんでした—— マテリアルは存在すると結論づけ、第二部へ進みました。プロンプト 15 はリリース パス:プロンプト 7 から意図的に未配線のまま残していた 1 本の exec ワイヤー (ゲートの奥に停めてあったパーフェクトヒットのバースト)を接続し、エフェクトを 肉汁ブラウンに塗り替え、点呼を実行——8 アセット、すべてクリーンにコンパイル。

プロンプト 16:本物のバグ——そしてタイトルに答える瞬間
リリースパスの後も、パーフェクトのスプラッシュはゲーム内で白の ままでした——ツールのレポートは緑で、色の値がアセット内にあることも検証可能 だったのに。プロンプト 16 はモデルに謎を手渡します:なぜ色が画面に届かないのか 突き止めよ。返ってきた診断は、プロジェクト全体で一番賢い瞬間です:Niagara は システムをバックグラウンドでコンパイルしており、ゲームはずっとエフェクトの古い コンパイル済みコピーを再生していた。その修正:3 つのエミッターすべてで色を 設定し直し、保存し、システムをエディターで開いて再ビルドを強制。次の Play: パーフェクト 2 回、火花付きのダークブラウンのスプラッシュ。これはチュートリアルの パターンマッチングではありません——エンジンのアセットパイプラインについての推論です。
プロンプト 17 はデザートです:新しいパノラマ——バーガーの街の上で大口を開ける 巨人の頭——をインポートし、マテリアルのサンプラーを差し替える。インポート 1 回、 差し替え 1 回。パンの数学はテクスチャに触れないスカラーパラメータの中に住んで いるので、背景はセッション中のビューポートでライブに切り替わりました。

6. 正直な結論
- 本物のプロジェクトを生き延びました。まっさらなコンテキストの プロンプト 17 回、すべてのシステムがクリーンにコンパイル、本物のエンジン レベルのバグを 1 件診断して修正。ゲームの骨格は Play を一度も押さずに 構築されました。
- クラウドのフロンティアモデルより遅い。大きなコードブロックは コンシューマー GPU 1 枚で 2〜3 分ストリーミングし、最重量のグラフはさらに 約 3.4 分のエンジンコンパイルを要しました。昼休みではなく、静かな夜を予算に。
- ハーネスが実働します。Cline は落ちた MCP 呼び出しを 3 回 再送。モデルは自分の誤った API 呼び出しからも、アセット衝突のリトライからも 回復しました。Experimental 級の MCP エンドポイントはつっかえるものと想定し ——そしてループがそれを吸収すると期待してください。
- 払っていないぶんの知性はプロンプトが運びます。 正確で一システムずつのブリーフとルールファイルこそが、記憶なしのローカル モデルをシニアのように振る舞わせます。曖昧なプロンプトは接触に耐えません。
- Claude の代わりになる?今回のような構造化されたビルドなら—— 正直、API コスト $0.00 で仕事をやり遂げました。散らかったオープンエンドな 作業では、フロンティアモデルが買ってくれる余裕は 27B のローカルモデルには ありません。イデオロギーではなく、プロジェクトごとに選びましょう。

そして、数字合わせもちゃんと成立しています:17 プロンプト、 約 17 GB のモデル、そして最終タワーは17.7 キロメートル——宇宙の縁を越え、巨人の開いた口の中へ、きちんとしたゲームオーバー画面 付きで。その全ステップの請求額が $0.00 でした。
実際に手に入るもの
これがパイプラインの全部です:llama.cpp のコマンド一つ、Cline の設定ページ一枚、 MCP エントリ一つ——そしてクラウドエージェントが操るのと同じエディターを、 ローカルモデルが操ります。こうしたプロジェクトを養う生成ツールは変わり続けます。 新しいものが出れば、そのまま アリーナ に入るので、コミットする前にブラインドで比較できます。この物語の前章は Unreal Engine 5.8 Native MCP + Claude と Claude Code + Unreal Engine 5で。
フルビルドを見る
セットアップと全 17 プロンプトを、最初から最後まで YouTube で。
Stefan Vaskevich