Posted at

C#でツクールMV用の自作のエディタを作ってみた

More than 1 year has passed since last update.

Qiitaに一番不要で半分ぐらいスパムとか言われる「○○使ってみた系記事」です。

今回はツクールMV本体のエディタで機能不足を感じたのでC#のFormを使いエディタを自作しました、

初めての部分が多かったので苦戦しましたが、ツクールのWindowとあまり変わらなかったです。

まあ、MVCな雰囲気であるとどこも似たような内容なんでしょうね。

2週間近くかかりました。


ツクールのデータは簡単に読み込める

ツクールのdataフォルダにあるjsonはそのまま読み込めました。

必要なクラスを書いて読み込めば一発です。

変数やコモンイベントの名前も読み込めたのは意外でした。


継承はほどほどに使う

Formにある様々なControlはObject型に対する操作になっているので、自分で使う場合はほどほどに具象型に変化させる必要があります。

継承した後で、自分が使うメンバー変数を追加してうまく動かしましょう。

アイテムや変数を選択する機能は思ったよりも使いやすかったので、今後も再利用すると思います。


データ設定はLoadで行うべし

FormにControlを割り当てて組み立てるのはコンストラクタでやってもOKみたいですが、ハンドラに呼び出しが飛ぶような部分はLoadイベントに設定するのがよさそうです。

コンストラクで初期化した後、該当するControlのLoadにイベントを追加しましょう。


BindingSorceは便利

ListBoxにデータを入れる場合、BindingSorceを挟んであげると、変更通知がうまく行きます。

よくわかりませんが、ResetCurrentItem()は変な動きが多かったので微妙でした。


ShowDialog()をうまく使おう

ツクールMVのエディタではアイテムの選択などの際に新しいウィンドウが開き、入力が終了すると閉じます。

こういったFormはShor()ではなくShowDialog()で開きましょう。


適度なタイミングでファイルを分けよう

最初は1つのソースコードに全部のクラスを書く勢いで書きましょう。

何割か書いたあたりで処理を分割できる場所が見えてきます。


1データ1クラスを徹底する

今回のクエストエディタにおいて、クエストに含まれるデータは名前・受注可能条件・報酬・メッセージなどでした。

名前以外の3つはクラスとして作成し、編集用のControlもそれぞれ〇〇Editorといった形で全てクラス化しています。

どこで何を編集しているかわかりやすいのは大切なことです。


困ったらVisual Studioのデザインツールで組み、コードを調べる

書き方がわからなくなったら、それっぽいパーツをデザインツールで組み込みソースコードを見ましょう。

勝手に書き換えるなとありますが、その中身はいたって普通のコードです。

参考にして自分で書きましょう。


DLLを埋め込む設定をちゃんと入れる

ILmergeというツールがあるので、これを使いましょう。

埋め込む際のスクリプトが載っていたサイトは失念。

環境によって違うかもしれないので、ググりましょう。


おわりに

C#でエディタを作るのは悪い話ではないですが、未経験で書くと非常につらいです。

プラグインを作るよりもよっぽど大変でした。

また、データの整合性などをチェックする手間があるので、次に作るとしたらJavaScriptで作ります。

しかし、プロトタイプ作成としてはC#はとても役に立ちました。

今後も拡張エディタは研究を続けていきます。