チャッピーにUnity MCPを導入してみる

UnityでMCPを!?

できらぁ(要Unity AIサブスク)。

gamemakers.jp

...すなわち、ただでは使わせんと云うことである。非常にケチ臭い。

しかし、捨てる神あれば拾う神あり。OSSで有志によるMCPサーバーが公開されているので、これを使うことにする。

github.com

尚、Unity側に紛らわしい規約があるので注意が必要である。非常にケチ臭い。

automaton-media.com

MCPとかいう神機能(本日2度目)

この下りはもう今日やってるので、こちらを参照されたい。

himatsubushi-industry.hatenablog.com

導入準備

何はなくとも、まずuvを入れよう。すでに入ってるかもしれんけど。

docs.astral.sh

次に、UnityのPackage Managerから、MCPサーバーを導入する。

”+”から、"Install package from git URI..."を選び、

"https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#main"を入力して"Install"をクリックすればインストールは完了である。

設定

メニューより"Window"→"MCP for Unity"→"Toggle MCP Window"を開くと次のWindowが開く。

画面はすでに設定済みで申し訳ないが、"Configure ALL Detect Clients"をクリックすれば、インストール済みAIに対する設定を自動でおこなってくれる。

そして"Start Server"をクリックすれば導入完了である。超簡単。

弱点は、毎プロジェクトパッケージの導入が必要なことだが、それぐらいは許容しよう。

チャッピーにBlender MCPを導入してみる

世はまさに大AI時代!

まぁ、話題の中心はChatGPT/CodexとClaude/Claude CodeでたまにCopilot、Geminiという感じだが、どれか一強という状況でもないのが悩ましい。

また、それなりに使おうと思うと最安プランでも課金必須なのだが、あれもこれもと契約が許されるほどお財布事情は芳しくはない。昨今の情勢下では特にね。

というわけで、一時期有望株であるチャッピーとクロードに課金していろいろ試行していたが、ゲーム制作観点では画像生成でイメージボード出しながら企画立案できるチャッピーが便利なのと、何よりチャッピーがローカルMCP鯖に対応したので、当面はチャッピーに課金を絞ることにした。

MCPとかいう神機能

念のため、MCPが何者か触れておこう。

これまでチャット欄の中でしか文章や画像を出力できなかったチャットAIに、直接ファイルをいじらせたりアプリを操作させるための仕組みである。

ja.wikipedia.org

もちろん、アプリ側もMCPに対応する必要があるが、アプリ側さえ対応していれば、ちまちま手作業することなくコンテンツをオーサリングできるというもので、導入しない手はない。

特にゲーム制作の観点から導入したいのがBlender MCPとUnity MCPであるが、まずはBlender MCPからトライしたいと思う。

いざ導入

Blender MCPは、しばらくは有志が作成したものが先行したが、今は公式から配布されているのでこれを使用する。

www.blender.org

で、アドオンをBlenderに入れて、MCPクライアントとなるCodexアプリ、もといChatGPTアプリにサーバーを認識させれば完了である。おまけに先人の知恵もある。

www.ipentec.com

ちなみに、アドオンの導入はメニュー操作をすっ飛ばして、公式ページのアイコンをBlenderにドラッグ&ドロップするほうがお手軽で良いだろう。

あと、uvのインストールは忘れないように。

たったこれだけで、MCPの導入は失敗である。あれ?

MCPが改版されてた件

Codexと数時間すったもんだしながら判明した原因は、以下の通りである。

  • 数日前にMCPが2.0.0に改版されていた。
  • uvがBlender MCP鯖実行時にMCP 2.0.0で依存関係を解決しようとしていた。
  • Blender MCP鯖がMCP 2.0.0に適合していなかった。

というわけで古いMCPを適用する必要があるが、これを行うため、まず、現在公式のリポジトリから直接取りに行っているところを、ローカルにCloneしてこれを使用する。

git clone https://projects.blender.org/lab/blender_mcp.git "C:\Users\{ユーザー名}\blender_mcp"

そして、config.tomlもローカルを参照するよう書き換える。

[mcp_servers.blender]
command = 'C:\Users\{ユーザー名}\.local\bin\uv.exe'
args = [
  "--directory",
  'C:\Users\{ユーザー名}\blender_mcp\mcp',
  "run",
  "blender-mcp"
]
enabled = true

[mcp_servers.blender.env]
BLENDER_MCP_HOST = "127.0.0.1"
BLENDER_MCP_PORT = "9876"

最後に、”C:\Users{ユーザー名}\blender_mcp\mcp\pyproject.toml”にて、

"mcp[cli]>=1.2.0"

となっている個所を、

"mcp[cli]>=1.2.0,<2"

に変更すれば、mcp 2.0.0が導入されることはなくなるので、晴れてChatGPTアプリからBlenderの制御が可能となる。

って、Codexが教えてくれた。便利な世の中になったナァ。

尚、常用はChatGPTアプリではなくVS CodeのCodex拡張である。 いちいちアプリ開くのメンドイしね。

Blenderで動作するPythonスクリプトをVS Code上でごちゃごちゃしてみる

転職しました

提督業から足を洗い、今はキヴォトスで先生やっています。
あ、その間に独立傭兵に扮して星一つ燃やしたり澄んだ青空にしてみたり。

ちなみに本業は、チームマネジメント業です。中間管理職です。リアルで転職もしてません。

そして恒例のあけましておめでとうございます。

で、肝心のゲーム制作はというと...

まぁ、1ミリも進んでいません。

ネタは文庫小説の裏表紙に書かれたあらすじ程度の漠然としたものが積みあがる(そして没になる)一方で、どうしてもアウトプットに時間がかかる上、年々、個人製作のレベルでも求められるクオリティが上がっており、どんどんゴールが遠のいているので、せめてルーチンワークの省力化と加速化を図らねばと、モデリングのプロシージャル化にひそかに取り組んでいる。

当初はUnityのエディタ拡張で、と思ったが、単色板ポリ描くだけならまだしも、最低限のマテリアルを貼ったそこそこちゃんとしたモデルを作るのであれば、Unity APIで構築するには学習コストも構築コストも重すぎる。あと、売り物にするのにWin/Mac/Linux全部に対応しなk...ゲフンゲフン。

てなわけで、ちゃんと3D作成環境が整備されているBlenderでスクリプト組んで解決することとした。

尚、いつもの備忘録である。

開発環境その他諸々の導入

いつもの他力本願である。

qiita.com

ちなみに、今回使用したBlenderは4.1なので、導入するPythonやその他パッケージもバージョンを適宜対応する必要がある。

尚、途中、VS CodeのPython拡張からPythonインタプリタが探せない問題が発生した。
エラーメッセージでググったところ、まれに存在するケースの模様。stackoverflow.com

質問者のようにさすがに再インスコ繰り返しはメンドーだなーと思っていたが、試しでVS Codeのターミナルから決め打ちでPythonインタプリタを実行したら、すんなり解決した。

と、思ったら、今度はデバッガのアタッチに失敗。

BlenderやVS Codeを何度か立ち上げ直すうちになんか動作し始めたが、いまいち要領を得ない。得ないが、とりあえず目的は達せられたので置いておこう。

ちなみに、

fereria.github.io

こういう方法もあるようだが、調べる気力が出ないので、まずは前者の方法で今後は進めたいと思う。

MapMagic2を使ってみる

あけましておめでとうございます

新年の挨拶をちゃんと正月にできたので感無量である。

まぁ、冬期休暇開始早々に発症したインフル療養中で特にやることないからUnityいじって記事書いてるのが正直なトコロなのだが。

テレイン、何使ってます?

さて、いきなりだがテレインについて。

Unityには地表をデザインする手段がいくつかあるが、大別するとこんな感じだろう。

  1. 根性でモデリングする
  2. Unity標準Terrainオブジェクトを使う
  3. サードパーティアセットを使用する

で、個人的な感想ではあるが結論は3.以外選択肢はないと考える。

1.は論外として、2.もハイトマップをペイントして高低をつける方式なので苦行でしかない。1.よりましという程度のものだ。また、いずれの方法でも自然な地形を作るには、相当のスキルとセンスが必要だろう。

というわけで、テレインは金出して買うほうが精神的ストレスが少なくて良いだろう。

では、何を使えばいいのかというと、先人の大半がGaiaやGaia Proと答えるであろう。

assetstore.unity.com

assetstore.unity.com

ところがどっこい、今回取り上げるのはタイトルの通りGaiaシリーズではない。

Gaiaは予め用意されたハイトマップを合成して地形を生成し、表層のテクスチャや草木などのオブジェクトの配置をいい感じにしてくれるスグレモノだが、いかんせん"予め用意されたハイトマップ"で意図する地形を作るところに手間を感じており、個人的にはなんとかならんものかと悩んでいた。

そんな折、昨年末のフラッシュディールにヤツが現れた。

その名は"MapMagic2 Bundle"

assetstore.unity.com

どういうツールかというと、アセットストアページにも動画はあるが、こんなツールである。

www.youtube.com

ノード繋いでパラメータ編集したらオッケーと、とてもお手軽そうに見えるが、実際お手軽である。

作ってみた

テクスチャやオブジェクト配置関連はまだ学習できていないので、ひとまず簡単に地形を作成。

こんな感じでテキトーにノードを繋いだところ、

サクっとこんな地形ができる。

ゲーム次第だが、これだけでも平面部分に建築物でも置けば地形として十分要を足すであろう。何より、ノード追加や数値調整しながらほぼリアルタイムに地形変化を確認できるのがいい。

というわけで、今後はこれをメインツールに据えて地形デザインに励もうと思う。

セカイのテッペンにUIを描いてみる

ラズパイ止めました

費用対効果がないってことで開発テーマそのものが破棄されました。無念。

というわけで、ゲーム制作に戻ります。

しぐれういを描くわけではない

「VRでHMDみたいなUI描きてぇナァ」というわけで、実はGW中に着手しており、基本部分は実機動作確認できていたのだけれど、オブジェクトの至近に移動した場合、UIオブジェクトが対象のオブジェクトに埋まってしまう状態で放置していたので、これを解決しようと思う。

尚、わりと本番に近い作成内容なので、画像、ソースは一切なし。
まぁ、大した制作内容ではないんだが、一応ね。

ちなみに今回はシェーダーを理解してる人風に記述しているので、「シェーダー?何それ?」という人は、まずシェーダーについて勉強していただきたい。

docs.unity3d.com

まぁ、筆者も対して理解しとらんケドな。

対策前はどうだったのか?

HMDということで背景透過でフォント他諸々を描画するから、アンチエイリアスは必要だろうということで、アルファブレンディングできるシェーダー記述を調べてみた。

www.wwwmaplesyrup-cs6.work

尚、参考にしたのはこれとは違うかもしれないが、要点は

Tags { "RenderType"="Transparent" "Queue"="Transparent" }

と、

Blend SrcAlpha OneMinusSrcAlpha

である。

アルファブレンディングに直接関連するのは後者だが、例えば戦闘機のキャノピーを描いたとして、キャノピーと、キャノピーを透過した先のオブジェクトをアルファブレンドして描く必要があるが、キャノピーが先に書かれるとZテストで透過した先のオブジェクトの描画が弾かれるため、キャノピーが視線上の最前面にある場合はキャノピーしか書かれず、キャノピーの向こう側に異世界へのポータルが出現することとなる。

これを回避するための前者記述である。

docs.unity3d.com

ついでにBlendはこちら。

docs.unity3d.com

しかしこれだけでは、複数UIが重なった場合、やはりZテストの問題が解決できない。

ならば「Zバッファに書き込まなきゃZテストしないからいいじゃね?」ということで、

ZWrite Off

を記述。

docs.unity3d.com

これで万事解決ヤッター!と思いきや、透過しない近接オブジェクトにUIが埋もれた...というのが、事の顛末である。

で、どうしたのか

素直に他力本願。

qiita.com

「Zテストさせない」←まちがい
「Zテストに必ず成功する」←せいかい

ZWrite Off

を削除して

ZTest Always

で無事解決。というか、マニュアルよく読めと。

Raspberry Pi Zero WをUSB OTGでsshしてみる

あけましておめでとうございました

これも今年で4回目と思うといい加減反省せぇよと思うが、まぁ無理をしても仕方がない。ふんわりいこうよ。

まさかのRaspberry Pi

別にゲーム制作をあきらめたわけではないというか水面下でFusion360やらBlenderの練習をしてたりキャンプ道具を3Dプリントしてたりするので進捗ゼロではないのだがそれはひとまずおいておき、本業でRaspberry Piを扱う可能性が出てきたので、今回は学習がてら記事にしたいと思った次第。まぁ、いつもの備忘録。

とはいえ、オープンソースやプロトタイピング関連のネタはすぐ陳腐化するので、あまり信用しないでね、未来の俺。

Wi-Fiつきなのに初期状態でWi-Fi接続できないジレンマ

今回使用したのは、Raspberry Pi Zero W(正確にはWH)。

HDMI端子を備えているが、このサイズのコンピュータボードにモニタを繋げるのは無粋というもの(偏見)。従って、ターミナルで接続となるわけで、インストールOSはGUI抜きのRaspberry Pi OS Liteを選択。

というかRaspbianがいつの間にか改名してるの知らなんだ。

さて、Raspberry Piのネットワーク接続は一般的にWi-Fiでの接続になるかと思うが、我が家のWi-FiはMACアドレスフィルタリングを行っているので、接続のためにはMACアドレスを知る必要がありMACアドレスを知るためにはifconfigする必要がありifconfigするには接続する必要がある。完全なデッドロック状態だ。

「一時的にMACアドレスフィルタリング切ればいいじゃん!」

確かにその通りだが、そもそもこれは本業の予行演習である。社内ネットならばおいそれと設定変更できるものではないし、それ以前にRaspberry Piを社内ネットに繋ぐこと自体が難しい。尚更、Wi-Fi以外の接続手段が必要となる。

USBがあるじゃない

GPIOもあるのだが、ここはひとまずおいておこう。USBケーブルならそこらに転がっているが、GPIOは配線加工が面倒だからな。

というわけで、USBでOTGする具体的な方法がこちら(いつもの他力本願)。

karakuri-musha.com

そしてsshで接続すると、"Permission denied, please try again."の文字。は?

"SSH"はいらない

あ、空ファイルのほうね。

インストール時の設定でssh使用の有無を変更できるようになった模様。
ホント、この手の情報は陳腐化が著しい。

qiita.com

というわけで、無事にifconfigでMACアドレス取得完了。

あとは、フィルタリングリストに加えてRaspberry Pi側のWi-Fi設定をすれば、Wi-Fiで通信可能である。めでたしめでたし。

ちなみに

ここに至るまで、実はひと悶着あった。USB接続してもデバイスが認識されなかったのだ。

原因はとても単純。使っていたUSBケーブルが充電専用品だったこと。整理大事。

VRに手を染めてみる

 

 あけましておめでとうございます

年刊化しているのは多忙であるからで、決してゲーム制作を諦めたわけではない。
その証拠にアセットは年々積みあがっている。期待せずに待って欲しい。

あ、今年はソロキャンやろうと思います。

Oculus Quest2買いました

去年の晩秋に。

VR機器はすでにPSVRを持っていたものの、完全ワイヤレスであることで使用感がどうなのか気になったのと、何よりソフト開発ができるということが購入の動機である(リリースするとは言っていない)。

で、年末にUnity2019.4LTSで少しいじってサンプル程度のものは作成していたのだが、GWに改めていじるにあたり頭から抜け落ちていたので、今回、導入部を記事に残す事とした。

すなわち、いつもの備忘録である。

参考にしたもの

とりあえず、こちらを見てごにょごにょすれば、なんか絵は出せます。

framesynthesis.jp

尚、開発者モードにするためには開発者アカウント登録をせねばならんかったりするので、以下も参考にされたい。

note.com

早速トラブル

今回からUnity2020.3LTSとURPを使うこととした。現行のビルトインパイプラインも今世代限りという話も聞こえているので、今のうちに慣れておくこととしよう。

ちなみに、URPにするとこれまでのビルトインパイプライン向けのアセットはどないすねんと思っていたが、メニューで一発変換する機能があった。まさに杞憂。

negi-lab.blog.jp

Oculus Integarionを最新にアップデートしてインポートし、XR Plugin ManagementとOculus XR Pluginとインスコした後、Project SettingsでごにょごにょしてサンプルをBuild and Runかまして、さぁ起動!といったところでUnityロゴを見る間もなく即落ち。なんでー?

adb logcatでログを観察するも、ネットワークがナントカとかイマイチ的を得ないエラー。

途方に暮れていると、PCのOculusアプリがファームアップデートをお知らせしているのに気づく。

とりあえずアップデートし、改めてトライしたところあっさりサンプル起動。
バージョン管理は大事。古事記にもそう書かれている。

とりあえずここまで

 ほかにもカメラを入れ替えるとかいろいろあるのだが、前述のサイトで網羅されているので、ここでは省く。

次は何しようか?とりあえず、モノを掴んで投げるぐらいのことはしたいなぁ。