はじめに

スポンサーリンク

Claude CodeはAnthropic社が提供するAIコーディングアシスタントです。
今回はMCP(Model Context Protocol)という仕組みを使って、Claude CodeからBlenderとUnity Editorを直接操作することに挑戦しました。
「AIに3Dモデルを作ってもらう」「AIにゲームシーンを構築してもらう」という、なかなかロマンのある試みです😊

今回やったことをざっくりまとめると以下の通りです。

  • Blender MCPサーバーを設定してClaudeからBlenderを操作
  • BlenderのPythonスクリプトでモルディブ水上コテージ(ハイポリ)を自動生成・FBX出力
  • Unity MCPサーバーを設定してClaudeからUnity Editorを操作
  • Unity上でオープニング・エンディングムービーシーンをC#スクリプトごと自動生成

Blender MCP の連携設定

MCPサーバーのインストール

BlenderとClaude Codeを繋ぐには、blender-mcp(ahujasid/blender-mcp)を使います。
pip経由でインストールできる同名パッケージが存在しますが別物なので注意が必要です。GitHubから直接取得します。

# GitHubから正しいパッケージを取得
pip install blender-mcp

# ただし正しいのはこちら(GitHubリポジトリ: ahujasid/blender-mcp)
# addon.py を手動で Blender の addons フォルダに配置する

addon.pyをBlenderのアドオンフォルダに配置します。

~/Library/Application Support/Blender/4.2/scripts/addons/blender_mcp_addon.py

Claude Code側の設定

~/.claude/settings.json にMCPサーバーの設定を追加します。

{
  "mcpServers": {
    "blender": {
      "command": "/Users/yourname/.pyenv/versions/3.12.5/bin/blender-mcp",
      "args": []
    }
  }
}

Blender側の設定

Blenderを起動して以下の手順でアドオンを有効化します。

  1. Edit → Preferences → Add-ons を開く
  2. 「BlenderMCP」を検索してチェックを入れる
  3. Nパネル(3Dビューで N キー)→「BlenderMCP」タブを開く
  4. 「Connect to MCP server」をクリック

これでClaude CodeとBlenderが繋がり、チャットからBlenderを操作できるようになります。

Blenderでモデルを自動生成する

モルディブ水上コテージ(ハイポリ)

今回は以下の仕様でモデルを生成しました。

項目内容
ターゲットUnity HDRP(ヒーロー展示用)
ポリゴン数10万ポリ以上
テクスチャ2048×2048px PBR(Albedo/Normal/Roughness)×4素材
FBX軸Forward: -Z / Up: Y(Unity標準)
出力先/tmp/maldives_hq/

Pythonスクリプト(約500行)をBlenderのバックグラウンドモードで実行します。

blender --background --python maldives_bungalow_highpoly.py

生成されたファイルはこちら。FBXファイルは48MBでテクスチャ12枚込みです。

ファイルサイズ
maldives_bungalow.fbx48 MB
T_Thatch_Albedo.png5.9 MB
T_Teak_Albedo.png5.4 MB
T_Plaster_Normal.png7.2 MB
(他9ファイル)各4〜5 MB

実際にBlenderで開いてみたモデルがこちらです。

Blenderで生成したモルディブ水上コテージ

茅葺き屋根のテクスチャ・チーク材のデッキ・支柱・手すりがしっかり生成されています。
左側にはサンデッキとベッドも確認できます。

numpyでピクセルを1枚ずつ生成するため、2048×2048×12枚の処理には数分かかります。
Claude Codeのバックグラウンド実行機能を使って待つのがおすすめです。

スクリプト実行のコツ

Claude Codeにスクリプトを渡す際は、仕様書(.mdファイル)とPythonスクリプトをセットで渡すのが効果的でした。

@/Users/yourname/Downloads/claude_code_prompt_highpoly.md
@/Users/yourname/Downloads/maldives_bungalow_highpoly.py

↑のmdファイルの内容を実行してください

mdファイルには実行コマンド・出力先・各パーツの仕様を表形式でまとめておくと、Claude Codeが迷わず実行してくれます。

Blender 4.2対応の注意点

Blender 4.2ではPrincipled BSDFノードの取得方法が変わっており、名前ではなくタイプで検索する必要があります。

# NG(Blender 4.2では失敗する)
bsdf = mat.node_tree.nodes["Principled BSDF"]

# OK(タイプで検索)
bsdf = next(n for n in mat.node_tree.nodes if n.type == 'BSDF_PRINCIPLED')

また、Transmissionの入力名も変わっています。

# 両方試して対応する
for key in ("Transmission Weight", "Transmission"):
    if key in bsdf.inputs:
        bsdf.inputs[key].default_value = transmission
        break

Unity MCP の連携設定

Unity パッケージのインストール

UnityとClaude Codeを繋ぐには、MCP for Unity(CoplayDev/unity-mcp)を使います。
Unity PackageManagerからGit URLでインストールします。

https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#main

インストール後、Window → MCP for Unity を開き、Transport を「HTTP Local」に設定して「Start Server」をクリックします。

Claude Desktop App への設定

Unity MCPの設定は~/.claude/settings.json(Claude Code CLI用)ではなく、Claude Desktop Appの設定ファイルに書く必要があります。

~/Library/Application Support/Claude/claude_desktop_config.json

Unity MCPはHTTPサーバーとして動作するため、mcp-proxy を使ってstdio経由で接続します。

{
  "mcpServers": {
    "unity": {
      "command": "/Users/yourname/.pyenv/versions/3.12.5/bin/uvx",
      "args": ["mcp-proxy", "--transport", "streamablehttp",
               "http://127.0.0.1:8080/mcp"]
    }
  }
}

つまずいたポイント

接続まで結構つまずきました😅 ポイントをまとめます。

  • 設定ファイルの場所が違う:Claude Code CLIの~/.claude/settings.jsonではなく、Claude Desktop Appのclaude_desktop_config.jsonに書く必要がある
  • URLフォーマットは未サポート"url": "http://..."の直接指定はDesktop Appで弾かれる。mcp-proxyを挟む必要がある
  • 起動順序が重要:UnityでHTTPサーバーを起動してから Claude Desktop を再起動する
  • uvxのフルパスが必要:pyenv環境ではシムが解決されないため、フルパスで指定する

Unity MCPでシーンを操作する

シーン作成・Build Settings登録

接続が確認できたら、Claude CodeからUnity Editorを操作できるようになります。
「オープニングシーンとエンディングシーンを追加して」と指示するだけで、シーンの作成からBuild Settingsへの登録まで自動でやってくれました。

// Claude Code が実行した処理のイメージ
// シーン作成
manage_scene(action="create", name="OpeningScene", path="Assets/Scenes")
manage_scene(action="create", name="EndingScene",  path="Assets/Scenes")

// Build Settingsに登録(順番通り)
manage_build(action="scenes",
  scenes="Assets/Scenes/OpeningScene.unity,
          Assets/OutdoorsScene.unity,
          Assets/Scenes/EndingScene.unity")

オープニングムービーの自動生成

「オープニングシーンにデフォルメしたフレンチブルドッグのムービーを追加して」と指示しました。
Claude Codeが行ったことは以下の通りです。

  1. プリミティブ(Sphere/Cylinder/Cube)を組み合わせてデフォルメ犬を生成
  2. ライト・カメラを配置
  3. Canvas・フェードパネル・タイトルテキストをUI作成
  4. OpeningMovieController.cs を自動生成してアタッチ

ムービーの流れはコルーチンで実装されています。

IEnumerator PlayOpening()
{
    // 黒画面からフェードイン
    yield return StartCoroutine(FadePanel(1f, 0f, fadeInDuration));

    // 犬が左から歩いて登場
    yield return StartCoroutine(MoveDog(
        new Vector3(-4f, 0.18f, 0f),
        new Vector3( 0f, 0.18f, 0f),
        dogEnterDuration));

    // バウンス → タイトル表示 → ドリーイン → フェードアウト
    yield return StartCoroutine(BounceY(bulldog, 0.18f, 0.38f, 0.22f, 3));
    yield return StartCoroutine(FadeText(titleText, 0f, 1f, 0.8f));
    yield return StartCoroutine(DollyCamera(...));
    yield return StartCoroutine(FadePanel(0f, 1f, fadeOutDuration));
}

カメラの向きは最初に失敗しました。
フレンチブルドッグの顔は+Z方向を向いているので、カメラは+Z側に配置して180度回転させる必要があります。
「カメラが背後を映している」と伝えると正しく修正してくれました😄

最終的にPlay実行すると、下のようなアニメーションが動作しました。
黒画面からのフェードイン→犬が歩いて登場→バウンス→タイトル表示→フェードアウトという一連の流れが、GIFアニメのように滑らかに再生されました。

オープニングムービーの動作結果

エンディングムービーの自動生成

「エンディングシーンにフレンチブルドッグと他の動物たちが一緒に遊んでいるムービーを追加して」と指示しました。
Claude Codeはプリミティブでネコ・ウサギ・小鳥も自動生成してくれました。

動物特徴
フレンチブルドッグバット耳・潰れた鼻・クリーム色
ネコ三角耳・長いしっぽ・オレンジ色
ウサギ長い耳(内側ピンク)・赤い目・白色
小鳥丸い体・黄色・羽付き

ムービーの演出はこのような流れです。

  1. 犬が円を描いて元気に走り回る
  2. ネコとウサギがじゃれ合う
  3. 小鳥が犬の頭の周りを旋回
  4. 全員が中央に集合
  5. みんなでジャンプ!
  6. カメラがゆっくりズームアウトしてエンディングテキスト表示
  7. フェードアウト

Play実行すると、下のようなアニメーションが動作しました。
動物たちが元気よく走り回り、最後に全員でジャンプする流れがGIFアニメとして確認できます。

エンディングムービーの動作結果

Claude Codeへの上手な指示の出し方

今回の経験を通じて、Claude Codeに複雑な作業を頼むときのコツがわかってきました。

①仕様を表形式で渡す
ポリゴン数・テクスチャ解像度・出力形式などを表にまとめると、Claude Codeが迷わず実装してくれます。

②スクリプト+指示書をセットで渡す
実行するスクリプト(.py)と仕様書(.md)を@ファイルパスで同時に渡すと確実です。

③修正は「どこが問題か」を具体的に
「なんか変」より「カメラが背後を映している」「支柱と床に隙間がある」のように箇所を特定して伝えると一発で直してもらえます。

④エラーはそのまま貼る
コンパイルエラーやランタイムエラーはコピーしてそのまま貼り付けるだけで、Claude Codeが原因を特定して修正してくれます。

注意点

今回の試行を通じて、Claude Codeだけでモデルを生成する場合の限界も見えてきました。

複雑なオブジェクトの生成は難しい
Claude Codeに指示するだけでは、立方体・球体・円柱などのプリミティブを組み合わせた簡単な形状を作るのが限界です。人物・動植物・建築物など細部まで作り込んだモデルを一発で生成しようとすると、思い通りの結果にならないことがほとんどです。

複雑なモデルはモデル生成専用AIを使うべき
リアルな3Dモデルを作りたい場合は、Blender MCPでPythonスクリプトを書いてもらうか、3D生成に特化したAIツール(Meshy・Tripo3Dなど)を使うほうが現実的です。Claude Codeはあくまで「コード」で形状を組み立てるため、造形の細かさに限界があります。

ローポリなら許容範囲かも?
ゲームのプロトタイプやモックアップ用途であれば、プリミティブの組み合わせで作ったキャラクターでも十分機能します。今回のちびキャラ動物たちのように「雰囲気が伝わればOK」な用途ならClaude Codeだけでも十分楽しめます。

さいごに

「AIに3Dモデルを作ってもらう」というのが、ここまで現実的になってきたとは驚きです。
Blender MCPでは本格的なPBRテクスチャ付きハイポリモデルを自動生成でき、Unity MCPではシーン構築からC#スクリプト作成・Play実行まで全部AIに任せることができました。

設定周りで結構つまずきましたが(特にUnity MCPの接続周り😅)、一度動いてしまえば快適に使えます。
3DCGの知識がなくても「こういうものを作りたい」という指示を出すだけでベースが出来上がるのは、非エンジニアにとってもかなり大きな可能性を感じました。

それでは、今回はここまで。ありがとうございました😊