チュートリアルStefan VaskevichStefan Vaskevich

ローカル LLM + Unreal Engine 5.8 MCP:無料 AI がゲームを丸ごと作る

クラウドなし、API キーなし、タスクごとに $0.00:llama.cpp でローカル実行する Qwen3.6-27B を Cline 経由で UE 5.8 ネイティブ MCP につなぎ、17 個のプロンプトでプレイ可能なゲームを構築。

前回、Claude は新しいネイティブ MCP を通じて Unreal Engine 5.8 の中に 世界を構築しました——そしてあの動画に寄せられたトップコメントは、圧倒的に これでした:「わかった、でもこれをローカルで無料のオープンソース AI で できる?」 もっともな質問です。Claude は素晴らしい——請求書を見るまでは。

だから今回は:クラウドなし、API キーなし、サブスクリプションなし。 Qwen3.6-27B——270 億パラメータ、コンシューマー GPU 1 枚に載る約 17 ギガバイト——を、 同じネイティブ MCP を通じてライブの Unreal エディターへ直結します。プロンプトは 17 回、そのすべてが新規チャット:モデルはステップ間で何も覚えていません。 思考モードはオフ。そして Cline の履歴のすべてのタスクの隅には、同じ数字が 並びます:$0.00

スタックを一行で
Qwen3.6-27B(オープンウェイト、 llama.cpp でローカルにサーブ)+ VS Code のエージェントハーネスとしての Cline + ライブエディターを駆動する Unreal Engine 5.8 のネイティブ MCP サーバー。ゲーム全体の API コスト合計:$0.00。(GPU は別売り。)
Unreal Engine 5.8 の BurgerTower ゲームプレイ:フードタワーが PERFECT! x26 ストリークで 8,902 メートルまで昇り、パノラマの頂上では巨大な口が待ち構える——すべてローカル LLM が構築
最終成果:x26 のパーフェクトストリークで 8,902 メートル、背景の頂上に開いた巨人の口へ向かって昇っていく。このフレームの裏のブループリント、ウィジェット、エフェクトはすべて、17 GB のローカルモデルが書いた。

本当の問いは「エディターを開けるか」では決してありませんでした。ローカルモデルが本物のプロジェクトを生き延びられるか:ブループリントを書き、 28 ウィジェットの HUD を組み、入力システムを配線し、エンジンの奥底で自分のバグを 狩り出せるのか——それとも最初のツール呼び出しで崩れるのか。私たちの知る限り、 UE のネイティブ MCP を通じたローカル LLM ビルドの成功例はこれ以前に公開されて おらず、見つかった唯一の公開の試みは公開当日に失敗に終わっていました。ここに 正確なセットアップ、作られたもの、そして正直な評決を記します。

1. モデル:Qwen3.6-27B と、実際に必要なハードウェア

選んだのは Qwen3.6-27B——オープンモデルの中でエージェンティック コーディングのベンチマーク上位に現在位置する dense なオープンウェイトモデルで、 この世代にはツール呼び出しの改善が組み込まれています。ここで使った正確なビルドは unsloth の GGUF リポジトリ UD-Q4_K_XL 量子化 (UD = Unsloth Dynamic)——およそ 17 GB の重みです。

SWE-bench、Terminal-Bench、エージェンティックコーディングのテストで Qwen3.6-27B を他のオープンソースモデルや Claude と比較するベンチマークチャート
このモデルを選ぶ理由:Qwen3.6-27B はエージェンティックコーディングのベンチマークで dense なオープンソース勢をリード——エディターを操るエージェントにまさに必要なスキル。
ハードウェアの現実チェック
17 GB の量子化モデルに 40k トークンの KV キャッシュを加えると、 24 GB の GPU——RTX 3090、4090、5090 ならどれもクリア——か、32 GB 以上のユニファイドメモリを積んだ Apple Silicon Mac が 必要です。VRAM が足りない?コンテキストサイズを下げるか、同じリポジトリのより 小さい量子化を選んでください。以下のセットアップはそのまま同じです。主張を正確に 言うと:$0.00 なのは API 請求額——モデルはオープンウェイト、ツール類は オープンソース、Unreal はインストール無料(出荷したゲームには Epic の標準 ロイヤリティ条件が適用されます)。

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 は思考モードを無効化:エージェントループに必要なのはターンごとの素早いツール呼び出し一回であって、独り言ではありません——レイテンシは下がり、トークンの無駄もゼロ。
Qwen 公式の no-think サンプリングプリセット
Temp 0.7(Qwen はゼロを明確に警告——貪欲デコードはモデルを繰り返しループに追い込みます)、top-p 0.80、top-k 20、min-p 0.0(一部のフロントエンドは非ゼロをデフォルトにして出力を壊します)、presence-penalty 1.5 はモデルカードそのまま——そして --repeat-penalty 1.0、つまりオフ。llama.cpp のデフォルトは 1.1 で、あの旧式のペナルティは Qwen に実害を与えます。
すべてを左右する一つのフラグ:--jinja
--jinja は llama.cpp に モデルのネイティブチャットテンプレートを使わせます。これが ないと、サーバーは Qwen がツール呼び出しの整形に使うタグを解析できず——Cline は ツール呼び出しを一つも目にしません。モデルは生きているように見え、楽しく おしゃべりし、エディターには何一つしません。ローカルエージェントが「話すのに 動かない」なら、まずこのフラグを確認してください。
フルフラグセットで llama serve を実行する Windows PowerShell:Qwen3.6-27B が Hugging Face からダウンロードされ、読み込まれ、127.0.0.1:1235 で待ち受ける
PowerShell のコマンド一つ:llama.cpp が Hugging Face から 17 GB の量子化モデルを取得し、GPU に読み込み、127.0.0.1:1235 で待ち受けを開始する。

3. Cline を自分のサーバーに向ける

Cline がエージェントハーネス——無料のオープンソース VS Code 拡張です。llama-server は OpenAI 互換エンドポイントを公開するので、Cline はクラウド API とまったく同じ 感覚であなたの GPU と話します:

1

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 に合わせて。

2

Unreal エージェントに効く機能設定

Native Tool Call ON——プロンプトハックではなく、モデル本来の ツール呼び出し形式を使う。Parallel Tool Calling OFF—— どのみち Unreal エディターは並列作業できません。一度に一操作です。Auto Compact OFF——ここでは一チャット一タスクなので、圧縮 すべき長い履歴はそもそも生まれません。

3

Yolo Mode ON(任意、でもこれが醍醐味)

Yolo Mode はすべてのツール呼び出しを自動承認——bypass-permissions のローカル版 です。クラウドエージェントでは「続行しますか?」のたびに注意力お金を 払いますが、ここではモデルはあなたのもの。走らせましょう。

VS Code の Cline API Configuration:OpenAI Compatible プロバイダー、Base URL http://127.0.0.1:1235/v1、Model Qwen3.6-27B、Context Window 40960
クラウドの置き換えはこの設定ページ一枚:OpenAI Compatible プロバイダー、localhost の URL、そして -a フラグと一致するモデル名。

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.」

Unreal Engine 5.8 の空の BurgerStudio レベルの隣、VS Code の Cline に MCP 接続チェックタスクと、全タスクに付く $0.00 のコストラベル
チェーンの確認完了:Qwen(localhost:1235)- Cline - MCP(localhost:8000)- ライブの Unreal エディター。タスクリストのお約束に注目:すべてのタスクが $0.00 で終わる。
プロジェクトルールファイルをダウンロード(本当の時短ツール)

タスク間の記憶を持たないローカルモデルは、ルールファイルが生命線です。この BurgerTower_SystemPrompt.md には、プロジェクトの規約、エディター API のメモ、コンパイルの作法、そして 放っておけばプロンプトを一つずつ食い潰すエンジンの罠(float は型 real で宣言しないと無言で int になる。ツール呼び出しごとに一システム。デフォルト値警告を消すには二度 コンパイル)が詰まっています。プロジェクトに置いて、調整してください。

5. ストレステスト:17 プロンプトで完全なゲームを

プロジェクトは BurgerTower——ワンボタンのアーケード積み上げ ゲームです。食べ物が伸びていくタワーの上で揺れ、タップで落とす。きれいに着地 すればボーナスと肉汁のスプラッシュ。傾いたタワーは倒れてランが終わります。 フロアを重ねるごとにカメラは高く——街、雲、成層圏、宇宙へ。プロジェクトに 入っているのはアートのみ:8 つの食べ物メッシュ、パノラマテクスチャ、 空のスタジオマップ。ブループリント、グラフ、ウィジェット、入力アセット、 マテリアル、エフェクトのすべては、モデルが Python を通じてライブのエディター内で 書き上げます。

アセットは Tripo 製(アートは AI エージェントの仕事ではない)
8 つの食材メッシュ——ごまバンズ、ビーフパティ、トマト、レタス、ドーナツ、 ブルーベリーワッフル、パンケーキスタック、ペパロニピザ——は Tripo の HD モードで画像から生成し、各パーツにポリゴン予算を設定しました。Tripo は 現在 top3d.ai リーダーボード のトップ——そしてこの分業こそが機能するパターンです:生成ツールがアートを作り、 エージェントがその周りにシステムを組む。
生成された食べ物メッシュを表示する Tripo のアセットマネージャー:レタス、トマトスライス、ドーナツ、バンズ、ピザ、パンケーキスタック、ブルーベリーワッフル
このゲームのアート予算の全部:Tripo から出てきた 8 つの食べ物メッシュ。BurgerTower のそれ以外はすべて、ローカルモデルがコードで書いた。

そしてこれをデモではなく本物のベンチマークにするルールが一つ: すべてのプロンプトは、まっさらなコンテキストの新規 Cline タスク。モデルはステップ間で何も覚えていません——継続性はプロンプト自身が運びます。 毎朝記憶喪失で目覚める請負業者に渡す発注書のように。発注は全部で 17 件。

プロンプト 1〜6:Play を一度も押さずに骨格まるごと

最初の 6 プロンプトは各パーツを個別に作り、コンパイルのみで検証します: 物理プロファイルとメッシュプールを持つ落下ピースのアクター(メッシュがルート コンポーネントそのものでなければならない——物理はルートをシミュレート するので、空のルートにぶら下がったメッシュは物理が目覚めた瞬間にちぎれます)。 三重フィルターの Hit イベントが物理接触を正確に一回の「着地した」シグナルへ 変えるイベントグラフ。エンジンテンプレートから複製した Niagara バースト。19 個の 状態変数を持つカメラポーン。そして HUD。

Cline に貼り付けられた最初のプロンプト:StaticMeshComponent をルートに、PhysicsActor プロファイル、bLanded と MeshPool 変数を持つ BP_Ingredient を作成——隣は空の Unreal プロジェクト
17 分の 1 のプロンプト、新規チャットで:落下ピースのアクターを、なぜメッシュがルートであるべきかまで指定。自動承認:YOLO。

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 がゼロで立ち上がり、 ピースがベースのバンズの上で揺れる。

初めての Play-In-Editor スモークラン:SCORE 0、HEIGHT 0 m、SPACE/STRATOSPHERE/CLOUDS の目盛り付き高度ゲージ、タワーの土台の上で揺れるバンズ
初めて Play が押される——純粋な構築だけの 11 プロンプトの後で。HUD はゼロ、高度ゲージは配置済み、バンズ一つがサイン波で揺れる。

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

ブループリントエディターで開いた BP_BurgerPawn:BeginPlay、Tick、OnPieceLanded イベントと 19 個の型付き変数を持つ EventGraph、すべて Python 経由で作成
モデルが実際に書いたもの:BP_BurgerPawn のイベントグラフと 19 変数の状態ブロックを、事後に検分。クリックではなく BlueprintService 呼び出しで構築された。

プロンプト 14〜15:数式から組んだシェーダー、そしてリリースパス

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

リリースパスの検証ラン:雲のパノラマを背に 469 メートルのタワー、Cline のタスクサマリーが全アセットのクリーンなコンパイルを報告
リリースパス:停めてあったバーストが配線され、8 アセット全部が BS_UP_TO_DATE を報告し、パノラマ背景が上昇に合わせてパンする——数式から約 18 のマテリアルノードとして書かれた。

プロンプト 16:本物のバグ——そしてタイトルに答える瞬間

リリースパスの後も、パーフェクトのスプラッシュはゲーム内での ままでした——ツールのレポートは緑で、色の値がアセット内にあることも検証可能 だったのに。プロンプト 16 はモデルに謎を手渡します:なぜ色が画面に届かないのか 突き止めよ。返ってきた診断は、プロジェクト全体で一番賢い瞬間です:Niagara は システムをバックグラウンドでコンパイルしており、ゲームはずっとエフェクトの古い コンパイル済みコピーを再生していた。その修正:3 つのエミッターすべてで色を 設定し直し、保存し、システムをエディターで開いて再ビルドを強制。次の Play: パーフェクト 2 回、火花付きのダークブラウンのスプラッシュ。これはチュートリアルの パターンマッチングではありません——エンジンのアセットパイプラインについての推論です。

プロンプト 17 はデザートです:新しいパノラマ——バーガーの街の上で大口を開ける 巨人の頭——をインポートし、マテリアルのサンプラーを差し替える。インポート 1 回、 差し替え 1 回。パンの数学はテクスチャに触れないスカラーパラメータの中に住んで いるので、背景はセッション中のビューポートでライブに切り替わりました。

Cline のアート差し替えタスク:新しい大口パノラマテクスチャが背景マテリアルに適用され、タワーの土台の背後の Unreal ビューポートにライブで表示
プロンプト 17:インポート 1 回とサンプラー差し替え 1 回で、新しい空がビューポートに反映——マテリアルの再コンパイルは同期的。サイドバーのすべてのタスク:$0.00。

6. 正直な結論

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

そして、数字合わせもちゃんと成立しています:17 プロンプト 約 17 GB のモデル、そして最終タワーは17.7 キロメートル——宇宙の縁を越え、巨人の開いた口の中へ、きちんとしたゲームオーバー画面 付きで。その全ステップの請求額が $0.00 でした。

実際に手に入るもの

タスクあたり $0.00 のエージェントスタック
llama.cpp があなたの GPU で Qwen3.6-27B をサーブ、Cline がハーネス、UE 5.8 のネイティブ MCP が手足——チェーンのどこにも API キーなし。
実際に動くフラグセット
ツール呼び出しのための --jinja、エージェントループのための --reasoning off、Qwen 公式のサンプリングプリセット、そして無効化された repeat-penalty の罠。
完全に遊べるゲーム
物理の積み上げ、パーフェクトヒットのコンボ、28 ウィジェットの HUD、プロシージャルな背景、エフェクト、入力、ゲームオーバー画面——まっさらなコンテキストの 17 プロンプトで。
エンジンをデバッグできる証拠
Niagara の古いコンパイルという診断は、ローカルモデルがおもちゃに見えなくなった瞬間——アセットパイプラインについて推論し、再ビルドを強制した。

これがパイプラインの全部です:llama.cpp のコマンド一つ、Cline の設定ページ一枚、 MCP エントリ一つ——そしてクラウドエージェントが操るのと同じエディターを、 ローカルモデルが操ります。こうしたプロジェクトを養う生成ツールは変わり続けます。 新しいものが出れば、そのまま アリーナ に入るので、コミットする前にブラインドで比較できます。この物語の前章は Unreal Engine 5.8 Native MCP + Claude Claude Code + Unreal Engine 5で。

フルビルドを見る

セットアップと全 17 プロンプトを、最初から最後まで YouTube で。

これらのツールを自分で比較してみませんか?3D AIアリーナをご覧ください。

ローカル LLM + Unreal Engine 5.8 MCP:無料 AI がゲームを丸ごと作る | Top 3D AI