はじめに
先日AssetBundleMCPというAssetBundleを解析するMCP Serverを公開しました。
AssetBundleを解析してくれるMCP ServerをOSSとして公開しました!
— はなちる@ゲーム制作 (@hanaaaaaachiru) August 31, 2025
「AssetBundleに含まれるテクスチャの一覧を教えて」といった質問をgemini-cliやcopilot agentでできるようになります
セットアップも設定ファイルを編集するだけですので是非お試しくださいmm#csharphttps://t.co/7LYxBVxlYM pic.twitter.com/gnOW9hYvmM
今回は背景、概要、使い方、あと技術的な話も書こうと思います。
背景
まずAssetBundleの解析についてですが、公式が出しているUnityDataToolsを利用することで可能です。
github.com
ただこれセットアップが結構めんどくさいのが大きいのと、コマンドラインで色々と操作しないといけないのでUnityしか普段触られていない方にとっては結構ハードル高いなという印象がありました。実際にネットで調べてもそこまで記事が出てこないので、そんなに知名度がなく使われていなそうな気がします。
そんなときにmcp-dotnetという、dnlibを活用して.NETアセンブリを解析するMCP ServerがOSSとして公開されていることを知りました。
github.com
これと同じ発想で、AssetBundleをAIで解析しつつ、セットアップを徹底的に簡単にすることでより便利かつ広がりやすいのかなと思い作成に至ります。
概要
AssetBundleを解析してくれるMCP Serverですが、もっと分かりやすく書くとGemini CliやCopilot Agnet、Claude Code、CursorなどからAssetBundleの解析を自然言語を通して行うことができるようになります。
以下はGemini Cliで実際に行ってみたやり取りの一部です。
╭────────────────────────────────────────────────────────────────────────────╮ │ > C:/Users/..../sampleassetbundleのパスにあるアセットバンドルを │ │ 解析してください。 │ ╰────────────────────────────────────────────────────────────────────────────╯ ✦ アセットバンドルを解析します。 ✦ アセットバンドルの解析が完了しました。どのような情報を表示しますか? ╭────────────────────────────────────────────────────────────────────────────╮ │ > アセットバンドルにはどんなアセットが含まれますか?表形式で回答してください。 │ ╰────────────────────────────────────────────────────────────────────────────╯ ✦ 以下にアセットの一覧をテーブルで示します。 ┌─────────────────────────┬───────────┬──────┬──────────┐ │ アセット名 │ 種類 │ 名前 │ サイズ │ ├─────────────────────────┼───────────┼──────┼──────────┤ │ assets/sampledata/3.png │ Sprite │ 3 │ 1.1 KB │ │ assets/sampledata/3.png │ Texture2D │ 3 │ 256.2 KB │ │ assets/sampledata/1.png │ Sprite │ 1 │ 868.0 B │ │ assets/sampledata/1.png │ Texture2D │ 1 │ 256.2 KB │ │ assets/sampledata/2.png │ Texture2D │ 2 │ 256.2 KB │ │ assets/sampledata/2.png │ Sprite │ 2 │ 1.0 KB │ └─────────────────────────┴───────────┴──────┴──────────┘
また結構いろいろなことを知ることができまして、テクスチャのWidth・Heightやバイト数だったり、マテリアルがどのシェーダーやテクスチャを参照しているかだったり、アセットバンドル間の依存だったりも知ることができます。
READMEにある利用可能なツール一覧を見ることでも、ある程度できることが分かるかと思います。
github.com
使い方
以下の3ステップが一通りの流れになります。
1. 対象のAssetBundleをロードする
2. 情報を取得する
3. AssetBundleの解析結果を破棄する
1. 対象のAssetBundleをロードする
まずは対象のAssetBundle、もしくはAssetBundleを含むディレクトリへのパスを指定してロードをしてもらいます。ロードをすることで、カレントディレクトリにSQLiteが出力されます。(一応出力先も指定できます)
# User
> C:/path/to/your/assetbundlesにあるAssetBundleを解析してください
仮にディレクトリへのパスを指定した場合、その中を再帰的に調べます。アセットバンドル以外のファイルは無視されるのでご安心ください。
2. 情報を取得する
あとは知りたい情報を聞きます。毎回ロードする必要はないので、何回も質問して大丈夫です。
# User
> ロードしたAssetBundleに含まれるアセットの一覧を表形式で教えて下さい
またロードの際に生成したSQLiteを参照しているので、途中でAssetBundleに変更を加えても反映されないので注意してください。
3. AssetBundleの解析結果を破棄する
もう解析をする必要がなくなった場合は、解析結果が格納されているSQLiteを削除して、キャッシュを削除します。
# User
> ロードしたAssetBundleをアンロードしてください。
アンロードした後は、再度別のAssetBundleをロードすることが可能です。
技術的な話
ロードとアンロード
まずロードが実行されるとUnityDataToolsを活用してSQLiteを出力します。そしてアンロードでSQLiteを削除します。
毎回Toolを呼び出すたびにAssetBundleを読み込むのも考えたのです、パフォーマンス的な意味と外部連携の意味で見送りました。一応冒頭で紹介したmcp-dotnetも最初にロードするタイプになります。
GitHub - neoz/mcp-dotnet
おそらくパフォーマンス的な面は体感許容できる範囲かなという気もしているのですが、出力したSQLiteを外部ツールなどで利用するみたいなケースでも使えるの結構魅力的かもなと思っています。SQLiteの後始末がまあちょっと面倒ではありますが。
また同じ理由で見送りましたが、Microsoft.Data.SqliteのInMemory機能を利用して、ストレージにSQLiteを配置しないのも検討しました。もしかしたらオプションでメモリにデータを保存できるもあったら面白いかもしれませんね。
learn.microsoft.com
配布方法に関して
NuGetで配布しているのですが、.NET10の最新機能であるdnxを活用すると、設定ファイルに記述するだけでセットアップは終わります。
www.nuget.org
www.hanachiru-blog.com
{ "mcpServers": { "AssetBundleMCP": { "command": "dnx", "args": [ "AssetBundleMCP", "--yes" ] } } }
自身の環境に.NET10をインストールしないといけないのは注意点なのですが、是非この際に入れてみてはいかがでしょうか。とても便利なので入れる価値はあると思います。
dotnet.microsoft.com
AIにSQLを書かせる
個人的にかなり面白いと感じたものが、AIにクエリを書かせるということです。具体的にはexecute_sql_queryというToolを用意しているのですが、意外とAIが正しいクエリを書いてくれます。
╭──────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ > クエリを用いてassets/sampledata/1.pngというアセットがどのAssetBundleに所属しているのかを教えてください。 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────╯ ✦ assets/sampledata/1.pngというアセットはsampleassetbundleに所属しています。 ╭───────────────────────────────────────────╮ │ > 具体的にどういうクエリを実行しましたか? │ ╰───────────────────────────────────────────╯ ✦ SELECT asset_bundle FROM asset_view WHERE asset_name = 'assets/sampledata/1.png' というクエリを実行しました。
スキーマ構造であったり、クエリのサンプルはMCP ServerのResourceで提供しています。ちゃんとそれを読んでくれているのかは分かりませんが、AIすごいです。
最近Julesを触ったりもしているのですが、もはや仮想環境を用意してAIに自由にやらせた方が良いアウトプットが得られるという、令和プログラミングの片鱗を感じています。