PMXEプラグインを作る【プロジェクト作成編①】
前回
目的
今回はプラグインの元となる「プロジェクト」を作成します。
プラグインは「~.dll」という形式ですが、1つのプロジェクトにつき1つのdllファイルが作成されます。
MMDで例えるならpmmファイルあたりが該当するでしょうか。
環境・前提
- Windows 10
- Visual Studio Community 2019
- PMXエディタ 0257
手順
PMXエディタ同梱テキストのプラグイン解説.txt
を参考に進めていきます。
T0R0さんのブロマガであればPMDEプラグインの作り方 導入:T0R0のブロマガ - ブロマガが該当します。
○作り方(VC#2010の場合)
- クラスライブラリとしてプロジェクトを作成
- PMXエディタの"PEPlugin.dll"を参照設定へ追加
作成するライブラリクラスに"PEPlugin.IPEPlugin"を実装、
または"PEPlugin.PEPluginClass"から派生し"Run(IPERunArgs args)"メソッド等をオーバーライド必要な処理を記述しビルド
- 出来上がった"*.dll"ファイルをPMXエディタの"_plugin"フォルダ内へコピー(配布時はDLL単体で配布してください)
プロジェクトを作成する
1.クラスライブラリとしてプロジェクトを作成
Visual Studioを起動します。
Visual Studio 2019ならこんな画面です。
[新しいプロジェクトの作成]を選択します。
[新しいプロジェクトの作成]画面に遷移します。
[すべての言語]を[C#]にして絞り込みます。
[クラス ライブラリ(.NET Framework)]を選択後、[次へ]を選択します。
[クラス ライブラリ]ではなく[クラス ライブラリ(.NET Framework)]を選択します。
下記のように入力します。
- プロジェクト名:プラグインの名前 (英数字。他の方のプラグイン名とかぶらないようにします)
- 場所:任意 (デスクトップにそのまま、よりは新しいフォルダを作った方がよいです)
- フレームワーク:.NET Framework 4
[ソリューションとプロジェクトを同じディレクトリに配置する]はONでもよいのですが、個人的には下図のように[ソリューションとプロジェクトを同じディレクトリに配置する]をOFFにして、[ソリューション名]を付けることをおすすめします。
[作成]を選択します。
クラスライブラリのプロジェクトが作成されました。
フォルダ構成はこんな感じになります。
src └─PmxePlugin │ PmxePlugin.sln └─TestPlugin │ Class1.cs │ TestPlugin.csproj ├─bin ├─obj └─Properties AssemblyInfo.cs
1つのプロジェクトにつき1つのdllファイルが作成されるので、今回であればTestPlugin
フォルダ配下の情報を詰め込んだTestPlugin.dll
というファイルができます。
「ソリューション」は複数のプロジェクトをまとめるためのもので、プラグインの内容には直接影響しません。
2つめのプラグインを作成したい場合
1つめのプラグインを作成した時にできた「〇〇.sln」を起動します。
この記事通りに名前を設定した場合はPmxePlugin.sln
です。
ファイルをクリックすると画面が起動します。
[ソリューションエクスプローラー]というウィンドウの中で、ソリューション(PmxePlugin)を選択します。
右クリック > [追加] > [新しいプロジェクト] を選択します。
[新しいプロジェクトの作成]画面が開かれるので、以降は同じです。
プロジェクトが追加されました。
フォルダ構成はこんな感じになります。
src └─PmxePlugin │ PmxePlugin.sln ├─ClassLibrary1 │ │ Class1.cs │ │ ClassLibrary1.csproj │ ├─bin │ ├─obj │ └─Properties │ AssemblyInfo.cs └─TestPlugin │ Class1.cs │ TestPlugin.csproj ├─bin ├─obj └─Properties AssemblyInfo.cs
この場合、TestPlugin.dll
とClassLibrary1.dll
が作成されます。
プロジェクトにPEPlugin.dll、SlimDX.dllへの参照を設定する
2.PMXエディタの"PEPlugin.dll"を参照設定へ追加
ソリューションエクスプローラーでプロジェクト(TestPlugin)の [参照] を選択します。
右クリック > [参照の追加] を選択します。
[参照マネージャー] が開かれます。
[参照] を選択します。
PMXエディタのLibフォルダの中のPEPlugin.dll
とSlimDX.dll
を選択してください。
Lib ├─PEPlugin │ │ PEPlugin.dll ★ │ └─doc ├─PMX仕様 ├─SlimDX │ ├─x64 │ │ SlimDX.dll ★ │ └─x86 │ SlimDX.dll └─System
[OK] を選択します。
[参照] の中に「PEPlugin」「SlimDX」が追加されました。
参照の「PEPlugin」「SlimDX」を選択し、それぞれ[プロパティウィンドウ]の[ローカルにコピー]を[False]にします。
備考
フレームワークで.NET Framework4.0を選んだ理由
PMXエディタ同梱テキストのreadme.txt
にPMXエディタで使われているフレームワークが書かれています。
これに準じています。
●必須ランタイム
.NET Framework4.0 (3.5以下もインストール推奨)
DirectXランタイム
Visual C++ 2010 再頒布可能パッケージ
Visual Studio 2013 Visual C++ 再頒布可能パッケージ
ソリューションエクスプローラー
ソリューションを管理するためのウィンドウです。
詳細は以下を参照してください。
- VisualStudio(統合開発環境)の画面構成をまとめてみました! | きままブログ
- 第2回 Visual Studio 2017の基礎を知る:連載:簡単! Visual Studio 2017入門(3/4 ページ) - @IT
次回
作成中です。
PMXEプラグインを作る【番外編:参考になるもの】
PMDEプラグイン、PmxEプラグインについて
PMDE / PmxE の同梱テキスト
ものすごく丁寧にいろいろ書いてあるので、一回は読んでみるとよいと思います。
とりあえず下記のファイルは重要そうな順に並べました。
readme.txt
PMDE / PmxEの使い方や機能など。
プラグイン解説.txt
Lib > PEPlugin > doc の中にある。
ユーザープラグインの作り方や仕様について。(よく配布されているプラグインはこれ)
PMX仕様.txt
Lib > PMX仕様 の中にある。PMXがどのような構成か。
プラグイン解説_Cプラグイン.txt
Lib > PEPlugin > doc の中にある。
C#スクリプトについて。(編集 > プラグイン > CSScript > C#スクリプト から実行するプラグイン)
とある工房
PMDE、PmxEを配布してくださっている極北Pさんのブログ。
ひとまず検索してみるとヒットするかもしれません。
T0R0さんのブロマガ
PMDEプラグインの作り方の記事:T0R0のブロマガ - ブロマガ
闇鍋プラグインを配布してくださっているT0R0さんのブログ。
ここを読めば大抵のことは書いてあります。
ただブロマガが終了してしまうので、こちらでDLさせていただくのがよいと思います。t0r0_MMD_ブロマガ - BowlRoll
プログラミングの専門用語について
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
こちらのサイトは易しく説明してくれているのでおすすめです。
よくわからない単語がガンガン出てくると思うので、ここでなんとなく理解して次に進めるとよいと思います。
C#について
動画で見たいなら
C#入門 (全36回) - プログラミングならドットインストール
会員登録は必要ですが3分で区切ってくれるので一番とっつきやすいかもしれません。
初心者ほどおすすめ。
文章で読みたいなら
一週間で身につくC#言語の基本|トップページ~C#言語の初心者でも、簡単にプログラミングが気軽に学習できるサイトです。
細かい部分を丁寧にというより、順を追って理解したい、ざっくり俯瞰したい場合はよいと思います。
慣れてきた時に
C# によるプログラミング入門 | ++C++; // 未確認飛行 C
とほほのC#入門 - とほほのWWW入門
C#とはなんぞや、を詳しく説明してくれるサイト。
「配列ってつまりは何なんだ?」など逆引きリファレンスのように私は使っています。
公式
C# 関連のドキュメント - はじめに、チュートリアル、リファレンス。 | Microsoft Docs
C#を作成したMicrosoftのチュートリアル。
英語サイトによくある特徴的な日本語が平気ならよいかもしれません。
Visual Studioについて
画面レイアウト
VisualStudio(統合開発環境)の画面構成をまとめてみました! | きままブログ
「ソリューションエクスプローラーって何?」という時に。
参考になるソースコード
C#の一般的なソースコード
サンプルソースがたくさんあるサイト。
「ファイルを保存したいけどどうすれば出来るんだ?」というような目標がある場合にとても便利です。
プラグインのソースコード
PMDEプラグインの作り方 導入:T0R0のブロマガ - ブロマガ
プラグインの基本的なソースを配布されています。
- PMDEプラグイン作成用プロジェクトサンプル
- PMDE用プラグインボーン操作サンプルプロジェクト
- PMDE用プラグインモーフ操作用ライブラリ付プロジェクト
- FormSampleソースコード
- 剛体・Joint操作サンプルコード
闇鍋プラグインのソースコードも配布してくださっているのでbowlrollを見てみることをおすすめします。
t0r0 - BowlRoll
MMD関連の便利機能など
目的
便利機能をまとめていきます。
PMDEditor / PmxEditor
同梱のreadme.txtを改めて読むといろんな機能がありますね…。
標準機能:自動バックアップ
デフォルトでは無効になっているので、有効にしておくと救われる命があるかもしれません。
小ネタ2 (PMXエディタ): とある工房
編集 > プラグイン > System > 自動バックアップ > 有効:ON
標準機能:プラグインのフォルダの場所を変更できる
基本的には下図のように_plugin
内のUser
に配布されたプラグインをつっこんで有効化させますが、PmxEditorのバージョンが上がるたびにコピペしないといけないのが少し面倒です。
PmxE ├─PmxEditor_0254g │ ├─Lib │ ├─_data │ └─_plugin │ ├─CSScript │ ├─Launcher │ ├─System │ └─User ← 同じデータをコピペ └─PmxEditor_0257 ├─Lib ├─_data └─_plugin ├─CSScript ├─Launcher ├─System └─User ← 同じデータをコピペ
これを上手いことしてくれる(=外部参照)のが_plugin
の中にあるuser.path
というファイルです。
例えば以下のように_plugin
フォルダを各バージョンの外に置きます。
PmxE ├─PmxEditor_0254g │ ├─Lib │ ├─_data │ └─_plugin │ │ user.path ■ │ ├─CSScript │ ├─Launcher │ └─System ├─PmxEditor_0257 │ ├─Lib │ ├─_data │ └─_plugin │ │ user.path ■ │ ├─CSScript │ ├─Launcher │ └─System └─_plugin ★ └─User
_plugin
フォルダのパスを調べます。
調べ方はこちら。
各バージョンの_plugin
フォルダ内にあるuser.path
をメモ帳で開きます。
;このファイルにプラグインの外部参照先を指定可能(UTF8で要テキスト保存) ;例) C:\PmxEditor\_plugin
先ほど調べたパスを入力します。
;このファイルにプラグインの外部参照先を指定可能(UTF8で要テキスト保存) ;例) C:\PmxEditor\_plugin C:\_app\MMD\_modeling\PmxE\_plugin
;
で始まる行は無視される(=コメントアウト)のでそのまま放置でも削除しても問題ないです。未来の自分が忘れた時に思い出すヒントになるので残しておいた方が無難です。
メモ帳で、ファイル > 名前を付けて保存 > ファイルの種類:すべてのファイル、文字コード:UTF-8 を選択して保存します。
これでPmxE
フォルダ直下にある_plugin
フォルダ(★)からプラグインのdllを読み込めるようになりました。
これからは
- 新しい配布プラグインを追加したい場合 →
_plugin
フォルダ(★)のUser
フォルダに入れる - 新しいPmxEを追加したい場合 →
user.path
ファイルを前のバージョンからコピペする
とするだけでよくなります。
標準機能:複数の値を一度にコピペ(ベクトルコピー)
1つの項目に対して複数の値が存在するものがあります。
例えばボーンの「位置」ならX座標、Y座標、Z座標。
材質の「拡散色」ならR、G、B。
これらを一気にコピペしたい場合、項目名の部分にマウスカーソルをかざし、紫色に変わった時点で右クリック > ベクトルコピー。
用語
パス
ファイルやフォルダ(ディレクトリ)の場所を示す情報
が「パス(path)」です。
パスとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
パスを調べるにはまず該当のフォルダを開きます。
上部のアドレスバーをクリックすると表示されるのがパスです。
今回だとC:\_app\MMD\_modeling\PmxE\_plugin
が_pluginフォルダのパスです。
例えばUserフォルダのパスはC:\_app\MMD\_modeling\PmxE\_plugin\User
、memo.txtファイルのパスはC:\_app\MMD\_modeling\PmxE\_plugin\memo.txt
となります。
ボーン検索・一括操作プラグイン(BatchOperate)の使い方
ボーン検索・一括操作プラグイン(BatchOperate)とは
ボーンを検索したり一括更新・置換できるPMXEditorプラグインです。
以下の説明では
- オレンジ:検索入力部
- 緑:更新入力部
- 紫:一覧部
とします。
インストール
_plugin\User
配下にフォルダごと置いてください。
検索について
検索入力部に検索内容を入力して[検索]ボタンをクリックすると、一覧部に検索結果一覧が表示されます。
- [クリア]ボタンをクリックすると検索入力部がリセットされる
- 複数の項目で絞り込むことも可能
- 基本的に完全一致検索
- チェックボックスは以下の3つの状態があり、未選択の場合は検索条件にならない
- 未選択→
- OFF(=False)→
- ON(=True)→
- ボーン名・ボーン名(英)のみできること
- 検索入力部に表示されていない項目(IKのTargetなど)は未対応
検索 例:ボーン名に「右」を含むIKボーンを検索したい
下図はPMXEのボーンタブ画面
- 検索入力部の[ボーン名]に「右」を入力し、[性能 IK]のチェックをONにする
- [検索]をクリックする
- 一覧部に検索結果が表示される
用語
完全一致検索
完全一致検索とは
検索のやり方を指す用語のひとつ
であり
検索キーワードと「完全に同じ」ものを探すよ!なやり方
です。
完全一致検索とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
例えば、「髪」で検索すると「髪」のみヒット、「右髪」「右髪IK」「髪後ろ」はヒットしません。
部分一致検索
部分一致検索とは
検索のやり方を指す用語のひとつ
であり
検索キーワードを「含む」ものを探すよ!なやり方
です。
部分一致検索とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
例えば、「髪」で検索すると「右髪」「右髪IK」「髪後ろ」「髪」がヒットします。
ワイルドカード検索
サクッと一言で説明すると
「ん~とね、何って決まっているわけじゃないんだけど、ここに文字列が入るから」を示す特殊文字
が「ワイルドカード」です。
ワイルドカードとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
「*」が「任意の0文字以上」、「?」が「任意の1文字」を表すワイルドカードです。
例えば、「右*先」で検索すると 「右手先」「右つま先IK」「右中指先」がヒットし、「右?先」で検索すると 「右手先」だけヒットします。
正規表現検索
サクッと一言で説明すると
文字列を指定する際に「これ!」とピンポイントで指定するのではなく「こんな感じ!」とちょっと幅を持たせて指定できる書き方
が「正規表現(セイキヒョウゲン)」です。
正規表現とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
正規表現はめちゃくちゃ便利なんですが、いろいろ出来すぎて例が挙げづらいので興味を持たれた方は下記のページをご参照ください。
サルにもわかる正規表現入門
「左〇〇ボーンの英名を〇〇_Lに統一したいな~」と思った時に下図のように入力すると「〇〇_L」になっていないボーンを探せたりします。
一括更新について
更新入力部に更新内容を入力し[一括更新]ボタンをクリックすると、一覧部で[Chk]列をONにしたものすべてが更新されます。
- [クリア]ボタンをクリックすると更新入力部がリセットされる
- 複数の項目を更新することも可能
- チェックボックスは以下の3つの状態があり、未選択の場合は更新項目にならない
- 未選択→
- OFF(=False)→
- ON(=True)→
- 更新入力部に表示されていない項目(IKのTargetなど)は未対応
一括更新 例:「右髪先」などの表示先ボーンを非表示にしたい
1 . 検索入力部の[ボーン名]に「先」を入力し、[検索]をクリックする
2 . ボーン名に「先」を含むボーンの一覧が表示される
3 . [全選択]をクリックし、すべての行の[Chk]列をチェックON状態にする
4 . 更新したくないボーンのチェックをOFFにする(今回であれば「左つま先」「右つま先IK」などは表示先ボーンではないためチェックをOFFにする)
5 . 更新入力部の[性能 表示]のチェックをOFFにし、[一括更新]をクリックする
6 . 「モデルを更新しました。」のポップアップが表示され、選択したボーンの[表示]がOFFに更新される
※「更新前バックアップ」についてはこちら。
一括置換について
一覧部の[一括置換入力]ボタンをクリックすると一括置換入力画面が表示されます。
表示された一括置換入力画面に置換内容を入力して[置換]ボタンをクリックすると、一覧部で[Chk]列をONにしたものすべてが更新されます。
一括置換 例:左ボーンの英名を「~_L」から「~_Left」に変更したい
1 . 検索入力部の[ボーン名(英)]に「_L」を入力し、[検索]をクリックする
2 . ボーン名(英)に「_L」を含むボーンの一覧が表示される
3 . 更新したい行の[Chk]列をチェックON状態にする
4 . 一括置換入力画面で上図のように入力し、[置換]をクリックする
5 . 「モデルを更新しました。」のポップアップが表示され、選択したボーンの[ボーン名(英)]]が「~Left」に更新される
※「更新前バックアップ」についてはこちら。
オプション設定
BatchOperate.dll.config
で設定できる機能のこと。
更新前バックアップ
一括更新や一括置換を実行した時に、更新直前のモデルデータを保存する機能です。
自分がうっかりバックアップし忘れるのでデフォルトで付けました。
不要な場合はBatchOperate.dll.config
のIsBackup
のvalue="true"
をvalue="false"
にしてください。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <!-- 検索 正規表現:true/false --> <add key="SearchRegexCheck" value="false" /> <!-- 一括置換 正規表現:true/false --> <add key="ReplaceRegexCheck" value="false" /> <!-- 更新前バックアップ:true/false --> <add key="IsBackup" value="false" /> </appSettings> </configuration>
検索 正規表現・一括置換 正規表現
検索入力部や一括置換入力画面に[正規表現]というチェックボックスがありますが、これをデフォルトでONにするかOFFにするかを設定できます。
デフォルトではOFFにしているので、ONにしたい場合はBatchOperate.dll.config
のSearchRegexCheck
もしくはReplaceRegexCheck
のvalue="false"
をvalue="true"
にしてください。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <!-- 検索 正規表現:true/false --> <add key="SearchRegexCheck" value="true" /> <!-- 一括置換 正規表現:true/false --> <add key="ReplaceRegexCheck" value="true" /> <!-- 更新前バックアップ:true/false --> <add key="IsBackup" value="true" /> </appSettings> </configuration>
最新の配布物利用規約 Latest Rules
ENGLISH
Rules
- If you do not follow the terms, you may not use this tool.
- These rules are subject to change without notice.
- I will not take responsiblility for any damage casued by this tool.
Do NOT distribute.
Do NOT claim as your own.
No commercial use.
日本語
利用規約
- 下記の規約にしたがえない場合、配布物は使用できません。
- 規約は予告なく変更されることがあります。
- 配布物を使用して発生したいかなる損害に対しても一切責任を負いません。
禁止
- 再配布
- 自作発言
- 商用利用
謝辞
下記のページを参考にさせていただきました。 ありがとうございます。
PMXEプラグインを作る【開発環境準備編】
目的
自分が久しぶりに作りたくなった時に思い出しやすいように記録しておきます。
プラグインが作りたいけれど一体何がどうなっているんだ…?という方の助けになればよいなと思います。
「開発環境準備」とは、プラグインを作成するために必要なソフト類をインストールしたり設定したりする作業です。
MMDで例えるなら、MMD本体をDLしたりDirectXをインストールしたりMMEを設定したりする段階です。
専門用語に悩んだら
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
こちらのサイトは易しく説明してくれているのでおすすめです。
プラグインを作成するために必要なもの
Visual Studio
プラグインは「C#」*1というプログラム言語を使用して作成します。
C#で作成する場合に色々手助けしてくれるツールがVisual Studioです。*2
ダウンロード
DLはこちらのページでできます。
Visual Studio Community 2019 - Free IDE and Developer Tools
Visual Studioには様々なバージョンがあります。
2021年7月現在、最新の安定版は「2019」です。
「2022」はまだプレビュー版(開発中)なので止めておいた方がややこしくありません。
また「Community」「Professional」「Enterprise」のバリエーションがありますが、企業向けの「Professional」「Enterprise」は有料版なので、無料版の「Community」を選びます。
似たような名前の Visual Studio Code(VSCode)というソフトもあるのですが、別物なのでお気をつけください。
インストール
インストールはこちらの記事が分かりやすいと思います。
ワークロードの選択は「VB Visual Studio Community 2019 インストールの手引き」の方がおすすめです。
あとから追加できるのでどちらでも構わないのですが、一気に入れた方が楽なので。
Visual Studioはめちゃくちゃ多機能なのですが、全部有効化させると容量を食うので必要なものだけDLしましょう、というのがワークロードの選択です。
PMXエディタ
プラグインを作りたい人なら既にあると思いますが…。
DLはこちらのページでできます。
ダウンロードページ: とある工房