Bakulogスマートフォン用の表示で見るBakulog獏の夢日記的な何か。RoslynMMM弄ってた中での副産物的なネタです。はじめにMikuMikuMoving(MMM)というのはMikuMikuDanceの互換ソフトで、開発者から見た印象としては「プラグインを簡単に作れて良いソフト」です。プラグインの作り方は基本的に公式wikiに載っているのですが、ここでは特に「コマンドプラグインでC#スクリプトが実行できるようにする」という事をやってみます。記事中ではコマンドプラグインを作りますが、常駐プラグインへの応用も難しくないと思います。Scriptingで、あなたのアプリケーションにもC#スクリプトを!」とかが大変参考になるので詳しくない場合はご覧ください。本記事ではC#スクリプトの使い方自体はスキップし、MMM上でスクリプトを使うことに注目して話を進めます。MMMでスクリプトを実行したくなるケースですが、私は「ちょっとしたインターフェースのチェック」とか「デバッグの簡易化」とか、あるいは「コマンド/常駐プラグインの動作の一部だけを後から変更したい」といった場面を想定しています。標準的なコマンドプラグインを作る場合、次のような流れが基本になるかと思います。プラグインのDLLを作るMMMを起動プラグイン動かす不具合あるMMMを終了DLLのソースを書き直すビルドDLLを配置MMMを起動(=2に戻る)いっぽう、もしDLLのプラグインが「スクリプトを読んで実行する」ものである場合、次のような流れでコードが書けます。スクリプト実行)不具合あるスクリプトを書き直すプラグイン動かす(=3に戻る)最初の2ステップはほぼあって無いようなモンなので「書いて実行する」という非常にシンプルな手順になります。スクリプトの規模によりますが、機能チェックで短いC#コードを動かしたい場合とか、シーンデータの一部をファイルに保存したい場合、あるいはデータを一部拾ってUDP通信などでネット越しに投げたいといったピンポイントな用途に対しては、いちいちDLLをビルドするよりもスクリプトで済ませる方がラクちんです。スクリプトを動かすサンプルプラグインのビルドと配置ソースはGithubに上げています。x64版でのみ動作確認しています。再利用制限は特にありませんが利用は自己責任でお願いします。このソースは(ソースを拾ってきた後でローカルPC内のDxMath.dllとMikuMikuPlugin.dllへの参照追加を行えば)そのままクラスライブラリとしてビルドできるのですが、MMMへの配置にあたってはいくつか手順を踏む必要があります。C#スクリプトを動かすためのライブラリとしてプラグイン以外のDLLが色々必要になります。具体的にはDLLの出力ライブラリ(x64/Debug)内に吐かれるdllのうち下記「以外」のDLLを依存ライブラリとして配置しなければなりません。DxMath.dllMikuMikuPlugin.dllプラグイン本体(RoslynScriptForMMM.dll)コピーすべきライブラリは合計で10個くらいあるので、これを適当なフォルダ(例えば"RoslynDLLs")を作った中にコピーします。ライブラリの入ったフォルダを丸ごとMikuMikuMoving.exeのあるフォルダに移動します。フォルダ中のDLLはそのままだとMikuMikuMoving.exeから参照できないので実行設定ファイル"MikuMikuMoving64.exe.config"を書き換えます。</runtime></configuration>これでフォルダ内のDLLが参照できるようになります。あとはプラグイン本体(RoslynScriptForMMM.dll)をPluginsフォルダに配置したらライブラリの準備はおしまいです。次にC#スクリプトを用意します。今回はシンプルな例として「メッセージボックスを表示し、シーン中のモデルがいくつあるかを表示する」という処理を行ってみます。{c}");これを"MMMPlugin.csx"という名前で保存し、MMMの実行フォルダに"Script"フォルダを用意した直下に配置します。以上で準備によって、実行フォルダからみたファイル配置はこんな感じになります。Script"を選んでメッセージボックスが出れば成功です。サンプルプラグインでもうちょっと遊ぶ場合サンプルプラグインではDLLがMMM本体からインターフェース越しに受け取るウィンドウ変数とシーン変数をスクリプトに渡すようにしています。これらの変数はそれぞれMMM.ApplicationFormとMMM.Sceneという変数からアクセスできるようになっているので、基本的にコマンドプラグインで可能な事はスクリプトでもやれるハズです。スクリプトを走らせる常駐プラグインを作る場合プラグインの作り方に常駐プラグインのインターフェース仕様が書かれていますが、この中でも特にUpdate関数中でスクリプトを実行するようにすればOKです。ここで注意ですが、C#スクリプトはあくまで「ビルドして」「走らせる」の2段階で構成されているので、サンプルプラグインのような「毎回スクリプトを拾ってきてビルド処理を行う」という書き方はオススメできません(サンプルプラグインではココらへんでスクリプトを毎回読み込んでコンパイルしています)。常駐プラグインの場合は例えば次のような手順がオススメです。プラグインがONになったらスクリプトをビルドして保持Updateではビルド済みのスクリプトを実行プラグインがOFFになったら所有しているスクリプトを破棄まとめC#スクリプトを呼び出すMMMプラグインが作れる事を紹介しました。再ビルド不要であるというのは案外嬉しいものなので、状況に応じてうまく活用してもらえればと思います。はてなブログPro獏の夢日記的な何か。xR、ロボティクス、ゲームエンジン(Unity)、モバイル(AndroidとXamarin.Forms)、C#仕事関係は原則TwitterのDMでお願いします。月別アーカイブはてなブログをはじめよう!baku_dreameaterさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。