-- Views
August 31, 26
スライド概要
2026年8月26日に開催されました「Unreal Engine Tokyo Dev Days 26'」イベントの「Unreal Engine MCP 🚀導入・💡応用・🛠️カスタマイズ」講演のスライドです。
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Unreal Engine MCP 🚀導入・💡応用・🛠カスタマイズ Epic Games Japan Developer Relations, Software Engineer 湊 和久
アジェンダ LLMとMCP MCPの導入 UE MCP動作の仕組み 機能の拡張 セマンティックサーチと ターミナル ● まとめ ● ● ● ● ●
本日説明 しないこと 本日説明 すること ● 「こんなプロンプトを使うとこんな ● MCP環境の確実なインストール ミニゲームが自動で作れます」 ● Art-Gen ● MCPとツールの動作原理 ● 原理を踏まえたエンジンの拡張方法
LLMとMCP LLMとMCP MCPの導入 UE MCP動作の仕組み 機能の拡張 セマンティックサーチと ターミナル ● まとめ ● ● ● ● ●
用語の定義 LLM (大規模言語モデル) エージェント MCP 大量のテキストから学習し、「文 章を読んで次の言葉を選ぶ」こと に特化した思考装置。 LLMを頭脳とし、自ら計画を立 て、ツールを使い、タスク完了に 向けて自律的に行動する実行シス テム。 (Model Context Protocol) 口先だけで、単体ではファイルの 読み書きや、エディタの操作など 具体的な作業はできない! エージェントがデフォルトで使用 できるツールには限りがある。 エージェントと外部アプリケー ションの接続をつかさどる共通規 格。 アプリケーションがMCPに対応 することで、エージェントからそ のアプリケーションを操作できる ようになる。
Unreal MCP ● Unreal Editor で使用できるMCPサーバーのプラグイン ● お手持ちのLLMを接続してUnreal Editorをライブでコントロール ● 開発者が手綱を握り、LLMはオペレーターに徹します なんかいい感じのこと言ってるけど どゆこと? ● MCPを通じてLLMは人間と同じやり方で開発作業に参加します ● 重要なジャッジはクリエイターが行います ● 人間が後でほどけないような物作りは行わず ツール拡張や、正しいUEの利用で開発者をサポートします
ツールセットプラグイン ● 各ドメインにおけるMCPツールを提 供する数々のツールセットプラグイ ン ● 各ツールセットがUnreal Editor操作 のための知識も提供 ● プロジェクト側でMCPに提供する独 自のツールを作成可能 これがドメインだ!
一例 ● PCG Primitives を使いこなし、ルール化された都市を1日で構築 ● 提示された写真からライティングを調整 スキルによる知識提供で、ポスプロに逃げず正しいパラメータを編集
MCP (ライブ状態のエディタと通信) LLMの UE支援の輪 Unreal Python コマンドライン操作 (サブシステム操作を含む無数のAPI) (UnrealEditor, UBT, Insights, etc…)
~UE5.7 でもすごかった UE5.8 でもっとすごくなる 従来もできた 一時的なPythonコードを生成 (各フレームをサンプリングし、足の骨の座標から接地フ レームを推定、AnimNotifyを埋め込み、保存) New! MCPを通じてPythonを自動実行 (実はそんなツールないがSlateを解析・操作できるので、 コンソールコマンド欄をPythonに切り替えるのを自力で 発見し、Slateを操作実行) > 足が接地したフレームにAnimNotifyを 置いて、足音を鳴らして
MCPの導入 LLMとMCP MCPの導入 UE MCP動作の仕組み 機能の拡張 セマンティックサーチと ターミナル ● まとめ ● ● ● ● ●
MCPの導入 省略可 Unreal MCP と AllToolsets プラグイン を有効化 MCPサーバーの自動起 動設定 ※その後再起動する か、手動起動させる Configの生成 Configが書きだされた フォルダをワークス ペースにして、エー ジェント起動
MCPの導入 省略可 Unreal MCP と AllToolsets プラグイン を有効化 MCPサーバーの自動起 動設定 ※設定後、UEを再起動 するか、手動で起動 ModelContextProtocol.StartServer Configの生成 Configが書きだされた フォルダをワークス ペースにして、エー ジェント起動
MCPの導入 省略可 Unreal MCP と AllToolsets プラグイン を有効化 MCPサーバーの自動起 動設定 ※その後再起動する か、手動起動させる Configの生成 Configが書きだされた フォルダをワークス ペースにして、エー ジェント起動 ModelContextProtocol.GenerateClientConfig <ClaudeCode|Cursor|VSCode|Gemini|Codex|All>
【重要】Epic公式Claude Codeプラグイン LLM側にUnreal Engineの 操作スキルを追加するための 公式プラグイン unreal-mcp MCPを確実に使用した作業依頼をトリガー unreal-skill UE対応のエージェントスキルを作成・整備 create-toolset ツールセットの作成・整備 https://github.com/EpicGames/unreal-engine-skills-for-claude-code-plugin
Epic公式Claude Codeプラグイン Claude Code上で、 /plugin install unreal-engine-skills-for-claude-code@claude-plugins-official ※オフィシャルマーケットプレイスにアクセスできない場 合は、先にこのコマンドを実行 /plugin marketplace add anthropics/claude-plugins-official Claude Code 以外のLLMエージェントをお使いでも、GitHubのURLを渡して依頼すれ ば、なんとかエージェントスキルを導入できると思います
MCP環境導入のポイント ● 先にUnreal(というかMCP)を起動してからエージェントを起動する と、MCPの接続でトラブルになりにくい ● 複数のUnrealでMCPを使用したい場合は設定でポート番号を分ける ● MCPを通じた作業を依頼する場合は念のため /unreal-mcp スキルを明示 しておく /unreal-mcp オッケー Claude, いい感じのゲームを作って
UE MCP 動作の仕組み LLMとMCP MCPの導入 UE MCP動作の仕組み 機能の拡張 セマンティックサーチと ターミナル ● まとめ ● ● ● ● ●
ツールとツールセット MCP用語 UE用語 ツール ツールセット サーバー側が公開し、LLMの呼 び出しで実行可能な機能 複数のツールをまとめたもの。 分野ごとに作成される。 UE5.8 ・C++, Pythonで実装 ・All Toolsetsに約830個のツール ・この大規模ツール情報の取得で 莫大なトークンが消費され コンテキストが埋め尽くされる この対策が...
ツールサーチモード(デフォルト) list_toolsets (有効なツールセットのリストをヒント付きで送る) ● ● ● UE MCPは右の3つのツールしか 公開しない 適切なツールセット選択の判断を 助ける手書きの付属情報付き タスク遂行に適切なツールを見つける ために往復することも describe_toolset (指定ツールセットの全ツール詳細を取得) ツールセットは「LLMに一度に見 せる量を減らすための階層」 call_tool (指定したツールを実行)
イーガー Eagerモード ● Enable Tool Search を切ると、 すべてのツールがMCPのネイティ ブツールとして公開される ● ツール選択を助ける手書きの情報 は送信されず、LLMの性能勝負に ● 必ずしもパフォーマンス向上につ ながるわけではない点に留意
ツールセットの実装
C++
/**
* Work with the loaded level: place and remove actors,
* organize the outliner, and query the world.
*/
UCLASS(BlueprintType, Hidden)
class ULevelTools : public UToolsetDefinition
{
GENERATED_BODY()
public:
/**
* Traces a line/ray through the world.
* @param Start The start point, in world space.
* @param End
The end point, in world space.
* @return Distance to the hit point; unset if nothing was hit.
*/
UFUNCTION(meta = (AICallable), Category = "Scene")
static TOptional<double> TraceWorld(FVector Start, FVector End);
};
Python
@unreal.uclass()
class LevelTools(unreal.ToolsetDefinition):
"""Work with the loaded level: place and remove actors,
organize the outliner, and query the world."""
@toolset_registry.tool_call
@staticmethod
def trace_world(start: unreal.Vector, end: unreal.Vector) -> float | None:
"""Traces a line/ray through the world.
Args:
start: The start point, in world space.
end: The end point, in world space.
Returns:
Distance to the hit point, or None.
"""
...
ツールセットの実装 C++ Python ● UToolsetDefinitionクラスを継承 したクラスを用意 ● unreal.ToolsetDefinitionを継承 + @unreal.uclass() ● AICallableのメタ情報をつけた static なUFUNCTIONを実装 ● ● 型はシグニチャから自動取得 @toolset_registry.tool_call + @staticmethod をつけて、関数 を実装 ● ツールセットレジストリへの登録 も自動で行われる ● 型アノテーション必須 ● ツールセットレジストリへの登録 も手で行う必要あり
ツールセットの実装
C++
●
C++/PythonのDoxygenコメント
がdescribe_toolsetやEagerモー
ド時のエージェントへの説明に
●
コメントがないとエージェントは
ツールの使い方を把握できない
●
(実はDoxygenコメントはUHTを
通じてメタデータ化され、後で読
み取れる仕組みがある!)
/**
* Traces a line/ray through the world.
* @param Start The start point, in world space.
* @param End
The end point, in world space.
* @return Distance to the hit point; unset if nothing was hit.
*/
UFUNCTION(meta = (AICallable), Category = "Scene")
static TOptional<double> TraceWorld(FVector Start, FVector End);
Python
@toolset_registry.tool_call
@staticmethod
def trace_world(start: unreal.Vector, end: unreal.Vector) -> float | None:
"""Traces a line/ray through the world.
Args:
start: The start point, in world space.
end: The end point, in world space.
Returns:
Distance to the hit point, or None.
"""
...
スキル モジュールやプラグインに同梱できるよう、LLMネイティブとは 異なる方法でスキルを定義できる LLMネイティブ .claude/ └── skills/ └── スキル名/ └── SKILL.md --name: 名前 description: 説明 --ここに指示(instruction) UE版スキル UAgentSkillのサブクラス ・C++ ・BP ・Python のいずれかで実装 どこに置いてもよい descriptionとinstruction プロパティをオーバーライ ドして実装
UAgentSkillのポイント UAgentSkillはListSkillsツール でフロントマターを取得し、 {"returnValue":{ "/Script/DataflowAgent.DataflowGraphEditingSkill": "Skill for generating and editing Dataflow graphs (simulation / deformation nodes)", ● トリガー時にGetSkillで指示を 取得して適用する仕組み ● 純正スキルと異なり、デフォル トでは認知されない "/PCGToolset/Skills/Skill_PCGGraphGeneration.Skill_PCGGra phGeneration_C": "Foundation skill for all PCG graph work, used for generating, editing, and using Procedural Content Generation (PCG) graphs. Use this skill whenever a task involves repeating patterns, rules, or batch operations on content in the level — ... PCG is NOT the right tool for one-off, unique placements that follow no repeatable rule. ...", ● LLMに自主的にスキルを取って もらうため、unreal-mcpスキル の導入(前述)が重要に ● "/NiagaraToolsets/Python/skills/renderers_PY.NiagaraRende rersSkill": "Covers choosing and configuring Niagara renderers -- per-type rules (Sprite, Mesh, Ribbon, Light, Decal, Component), source mode, sprite alignment, ...",
TIPS: ブロック/許可リスト ● ツールセット有効/無効はプロ ジェクト設定のため作業者レベ ルでは余計なツールやスキルを 読み込んでしまう ● 判断のノイズとなり、トークン も無駄になる ● 現状ではブロック/許可リスト で取捨選択できる
機能の拡張 (”エンジンの拡張”) LLMとMCP MCPの導入 UE MCP動作の仕組み 機能の拡張 セマンティックサーチと ターミナル ● まとめ ● ● ● ● ●
四本柱 MCP環境下におけるエンジン拡張の三本柱 ツールセッ ト エージェントが使えるエン ジン機能や自社パイプライ ンのラッパー サンプル ツールを組み合わせた実作 業の見本、再利用可能なパ ターン集 スキル 未知のワークフローへの道 案内となるプロンプトの束 即時コマン ド PCG Primitivesに仕込まれ たレベル作業用の特殊機能
四本柱 MCP環境下におけるエンジン拡張の三本柱 ツールセッ ト エージェントが使えるエン ジン機能や自社パイプライ ンのラッパー サンプル ツールを組み合わせた実作 業の見本、再利用可能なパ ターン集 スキル 未知のワークフローへの道 案内となるプロンプトの束 即時コマン ド PCG Primitivesに仕込まれ たレベル作業用の特殊機能
ツールセットの実装(再掲) ※でも実はEpic公式スキルで作って
もらうことができる!
C++
Python
/**
* Work with the loaded level: place and remove actors,
* organize the outliner, and query the world.
*/
UCLASS(BlueprintType, Hidden)
class ULevelTools : public UToolsetDefinition
{
GENERATED_BODY()
public:
/**
* Traces a line/ray through the world.
* @param Start The start point, in world space.
* @param End
The end point, in world space.
* @return Distance to the hit point; unset if nothing was hit.
*/
UFUNCTION(meta = (AICallable), Category = "Scene")
static TOptional<double> TraceWorld(FVector Start, FVector End);
};
@unreal.uclass()
class LevelTools(unreal.ToolsetDefinition):
"""Work with the loaded level: place and remove actors,
organize the outliner, and query the world."""
@toolset_registry.tool_call
@staticmethod
def trace_world(start: unreal.Vector, end: unreal.Vector) -> float | None:
"""Traces a line/ray through the world.
Args:
start: The start point, in world space.
end: The end point, in world space.
Returns:
Distance to the hit point, or None.
"""
...
/create-toolset UserDefinedStruct(Blueprint構造体)アセットを AI から作成・編集できる
C++ ツールセットを、プロジェクト側の新規 Editor プラグインとして作って。
ツールセット制作のベストプラクティス 明快 既存の UE API をそのまま写さない。UE の API は不必要に複雑なことが多い。 判定基準: テクニカルアーティストが実装を読まずに理解できるか。 完全 対称性を保つ。set があるなら get、create があるなら delete。 変更できない・する意味がないものは getter だけでよい。 組合せ可能 同種の操作には同じ型を使う。get_graph() が Graph を返すなら get_graph_nodes() は Graph を受け取る。ツールが自然に連結する形にする。 明示的 LLMが自己修正できるよう、失敗時は構造化されたエラーを提供 ※でも実はcreate-toolsetで 作ると自動適用される
ツールセット制作の 真のベストプラクティス /create-toolsetが有効な状態で エージェントに制作を頼もう!
四本柱 MCP環境下におけるエンジン拡張の三本柱 ツールセッ ト エージェントが使えるエン ジン機能や自社パイプライ ンのラッパー サンプル ツールを組み合わせた実作 業の見本、再利用可能なパ ターン集 スキル 未知のワークフローへの道 案内となるプロンプトの束 即時コマン ド PCG Primitivesに仕込まれ たレベル作業用の特殊機能
スキルの制作
C++
※でも実はEpic公式スキルで作って
もらうことができる!
Python
UCLASS()
class UPCGGraphGenerationSkill : public
UAgentSkill
{
GENERATED_BODY()
public:
UPCGGraphGenerationSkill ()
{
Description = TEXT(“Source-control
operations in the editor: status queries,
history, prior, revisions…”);
Instructions = TEXT(“IDENTITIY BY CONTENT
PATH\n”
“-Source-control operations identify an asset
by its content path.\n”
“\nEDITOR OPERATIONS AUTO-INTEGRATE\n”
“-Saving, moving, renaming through the
editor’s tools…”);
}
};
BP
_INSTRUCTIONS = """\
IDENTITY BY CONTENT PATH
- Source-control operations identify an
asset by its content path.
EDITOR OPERATIONS AUTO-INTEGRATE
- Saving, moving, renaming through the
editor's tools…
"""
@agent_skill
class
SourceControlSkill(unreal.AgentSkill):
"""Source-control operations in the
editor:
status queries, history, prior
revisions."""
instructions = _INSTRUCTIONS
/unreal-skill 「新しく構造体を定義しようとしたとき」に読ませる判断基準のスキルを
UAsset で /Game/Skills/ に作って。
スキル制作のベストプラクティス 新規性 エージェントがまだ知らないこと、ツールを使っても分からないことを書く 同僚感覚 マニュアルを書くのではなく、知識のある同僚に手短に伝えるように書く 不変性重視 プロパティ名やツール名など、時間とともに変わるものは埋め込まない 簡潔さ トークンはすべてコンテキストを消費する。本質的でも不変でもない内容は削る ※でも実はMCPまたはunreal-skillで 作ると自動適用される
スキル制作の 真のベストプラクティス MCPか/unreal-skillが有効な状態で エージェントにスキル作成を頼もう!
四本柱 MCP環境下におけるエンジン拡張の三本柱 ツールセッ ト エージェントが使えるエン ジン機能や自社パイプライ ンのラッパー サンプル ツールを組み合わせた実作 業の見本、再利用可能なパ ターン集 スキル 未知のワークフローへの道 案内となるプロンプトの束 即時コマン ド PCG Primitivesに仕込まれ たレベル作業用の特殊機能
例:PCG ToolsetにおけるExamples徹底活用 ・PCGグラフ作成のスキル(Skill_PCGGraphGeneration)に以下の指示が 仕込まれており、サンプルの徹底利用を促している サンプルグラフではプリミティブなノードを使用しており、正しく構成しやすくなっています。 ## サンプルグラフ / 以下のサンプル PCG を利用できます。 - PCG グラフを構築する際の正しいパターンとベストプラクティスについては、これらのサ ンプルグラフを大いに参考にしてください。 - ユーザーのリクエストに取り組む前に、役立ちそうなサンプルグラフの構造をすべて取得し てください。 - グラフをゼロから構築する前に、既存のグラフ(サンプルまたは過去に作成したもの)がユー ザーのニーズにすでに合致していないか確認してください。 - GetGraphStructure を使って、関連するサンプルグラフをすべてロードしてください。 - サンプルグラフは多めに取得する方針とし、「Basics」のサンプルグラフは必ず複数取得し てください。
四本柱 MCP環境下におけるエンジン拡張の三本柱 ツールセッ ト エージェントが使えるエン ジン機能や自社パイプライ ンのラッパー サンプル ツールを組み合わせた実作 業の見本、再利用可能なパ ターン集 スキル 未知のワークフローへの道 案内となるプロンプトの束 即時コマン ド PCG Primitivesに仕込まれ たレベル作業用の特殊機能
PCG Toolset と Instant ● PCG Primitives プラグインに13種類の 即時実行グラフが付属している ● LLMは揮発的なPCGコンポーネントを 使って実行し、そのあとPCGの痕跡を消 す ● マップにはその効用だけが残る・・・ ● この機能はLLMエージェントからしか使 用ができない
デフォルトの即時命令 ■ Create ─ 作成 ・Create_CombineActors … 選択/参照アクターを 1 つのアクターに統合(メッシュとスケルタルメッシュのみ) ・Create_CombineMeshes … 同じものを新規スタティックメッシュアセットへ。ピボット位置の指定と同位置スポーンも可 ・Create_PCGDataAsset … 同じものをアセンブリとして PCG データアセットに書き出し ・Create_Spline_Line … スプラインを作成。複数指定なら入力順に全アクターを通る線になる ・Create_Spline_Shape … 正 N 角形のスプラインを作成(ngon=3 で三角、4 で四角。幅・長さ・向きを指定) ・Create_Spline_ShapeFromPoints … 任意の制御点トランスフォーム列(巻き順)から図形を作成 ■ Place ─ 配置 ・Place_AlignTo … 対象アクターに整列。上/横/下/中央/背面/積み上げを軸ごとの基準で指定 ・Place_AlongSpline … スプラインに沿ってスタティックメッシュ/BP クラス/PCG データアセットを配置 ・Place_SnapTo … 対象にスナップ。ビューポートカメラの向きや任意のレイ方向も指定可 ■ Spawn ─ スポーン ・Spawn_PCGDataAsset … アセンブリの PCG データアセットを単独アクターとしてレベルに配置 ■ Transform ─ 変換 ・Transform_ShuffleActors … 選択アクターのトランスフォームをシャッフル ・Transform_Spline_Jitter … スプラインの制御点位置をジッターで乱す ・Transform_Spline_ProjectToSurface … 制御点を静的オブジェクト(またはランドスケープのみ)に投影・スナップ 字が小せえ~ PCGが一種のバッチに なっているのか
ということは…即時実行グラフは増やせるのでは? ● EXACTLY(そのとおりでございます) フォルダ準備 グラフのコツ 説明文を書く 置き場所は自由だが、一か所にま とめて、 Input_ActorRefsOrSelectionで 「現在のレベルの状態」を入力と して取り、 LLMエージェントはグラフの Descriptionを読んで現在のタス クに利用できるかを判断する プロジェクト設定 > プラグイン > PCG Toolset > Instant Graph Directories に登録 レベルに爪痕を残す、副作用 (メッシュの配置)をメインとす るグラフを組む ※点群を出しても意味がない! ※ただし、UE5.8の段階ではSkill_InstantLevelOperationsがPCG Primitives 下のフォルダを決め打ちで見ているという問題があり、修正が必要
セマンティックサー チ と ターミナル LLMとMCP MCPの導入 UE MCP動作の仕組み 機能の拡張 セマンティックサーチと ターミナル ● まとめ ● ● ● ● ●
セマンティックサーチ ● サムネイルを説明するキャプションをLLMが生成することで、「かわいい」 「機械っぽい」「赤い」などのアセットの意味検索を可能にします ● MCPに対応し、アセット検索をよりスマートにします ● アセットを右クリック>「似たようなアセットを探す」ことも可能に
セマンティックサーチの有効化 Semantic Search プラ グイン2種を有効化 エディタ設定でCaption とEmbeddingにAPIキー を設定 Max Concurrent Requestsも調整を コンテンツブラウザに 戻り、検索欄の「AI」 トグルをクリックして 有効にする unindexed横のアイコン をクリックするとイン デックスの作成が開始 される
お値段 ● 5,786アセットのインデックス作成で$3.71 ... 600円くらい(注:個人アカでの実験です!) ● 一度作成されたインデックスはDDCに保存され トークンの多重払いを防ぎます ● Indexed Paths を設定することで、セマンティッ クサーチの対象パスを制限できます
ターミナルプラグイン ● Unreal Editor上でシェルを動かすプラグイン ● cmd、PowerShell、Bashなど任意のシェルを指定 ● Unreal Editor上でLLMのCLIを直接操作できます ● よくわかんないけど、一体感アップ!
ターミナルプラグインの導入 Terminal プラグインを 有効化 省略可 省略可 エディタ設定のShell Executable Pathに任意 のシェルを指定※ 起動時に常時実行する コマンドを1行ずつか く ツール>ターミナルで 起動 ※起動するたびに1枚 ずつ開く ※Windowsの場合、省略するとcmdに "C:\Program Files\Git\git-bash.exe"やPowershellを指定する
まとめ LLMとMCP MCPの導入 UE MCP動作の仕組み 機能の拡張 セマンティックサーチと ターミナル ● まとめ ● ● ● ● ●
今日お話したこと ● MCP とツールセットを有効化することで環境がインストールされます ● Unreal Engine 公式スキルの導入をお勧めします ● ツールサーチと呼ばれる独自のトークン節約、ツール発見性向上の実装が入っ ています ● アセット化されたスキルで、スキルをUEプラグインに同梱できます ● スキルやツールセットを追加して機能の拡張が可能です (ゼロから書く必要はなく、エージェントに作ってもらえます) ● セマンティックサーチとターミナルプラグインでMCPの使い勝手がさらに向上 ● UE5.9でさらなる改善が見られるといいなあと思います
Thank ご清聴ありがとうございました