コンテンツにスキップ

エディタについて

エディタには「C#」「WPF(GUIフレームワーク)」を使って開発しています。
WPFを使ったGUIの開発は初めてなので、独学で勉強をしつつ実装を進めています。

「C#」「WPF」の採用理由

エディタの開発目標は2つあります。

  • エディタの開発イテレーションを上げる
  • 扱いやすいGUIを構築する

これを満たすために、使用する言語やGUIフレームワークについて、調査や比較をしました。

まず、開発言語はカスタム属性や拡張メソッドなどの機能があるC#に決定しました。(RuntimeのスクリプトもC#であるため、統一したいという考えでもあります)

つづいて、C#で使えるGUIフレームワークを調査しました。
「QtSharp」と「WPF」のどちらを採用するか悩みましたが、
現在も継続的にアップデートが続いていて、新しい情報も多いWPFを採用しています。
また、WPFの持つGUIの自動バインディング機能の存在も採用理由のひとつです。

Note

Qtはマルチプラットフォームであるため魅力的でしたが、エディタはWindowsに限定しても問題ないと判断しました

Note

本ポートフォリオ執筆中、「.NET 7.0」が正式リリースされました。
.NET 7.0には「MAUI」というGUIフレームワークへの公式対応も含まれています。
WPFと同様にxamlを用いたMVVMパターンでの開発ができる環境で、マルチプラットフォームに対応できるとのことです。
将来的にMAUIへの移行も検討しています。

MVVMパターン

GUIには「MVVM」というデザインパターンを用いて開発をしています。
「Model」「View」「ViewModel」の三層構造で分けて開発することで、結合度が無駄に高くなることを防いでいます。
また、テストを書きやすくもなります。

View部分の定義だけでGUIの表示部分が完成するので、見た目だけのプロトタイピング(モック)を素早く行うことができます。
今後の実装イメージが沸きやすくなりました。

PrismとReactiveProperty

当初は、生のWPFそのままで開発を進めていましたが、作業量が莫大であることに気が付きました。
そこで、MVVMのためのフレームワーク2つを使うことにしました。

Inspector

ゲームオブジェクトの情報や、付与されているコンポーネントを編集できます。
C#スクリプト側で[SerializeFid]属性が付与されたフィールドとプロパティが表示されます。

フィールド編集用コントロール

値を表示・編集するためのコントロールは、すべて自作しています。

これは、ゲーム開発に最適なGUIをエンジンユーザーに提供するためです。

特に、Vector3などの数値のコントロールは、扱いやすくするため、ドラッグするだけでも値を増減できるようにしました。
ちなみに、これはMVVMパターンにおける「View」側の実装にあたります。
Alt text