UE4のメリットの一つにソースコードが公開されているけど、これはゲームエンジンのみならずエディタ(UnrealEditorなど)の主要なソースコードも含まれている。
つまり、オレオレUnrealEditorを作成できる。企業や使う人によっては「デフォルト設定は微妙に使いづらいので、なんとかしたい」というニーズも(少ないかもしれないが)あるはず。ということで、UnrealEditor改造の入門編を書いてみる。
ただ、今回はうっかりUE4のmasterブランチ(UE4.10)で試してしまったので、以下で示したソースコードの行番号は今後ズレるかもしれない。ま、ソースコード自体はそう変化はしないはずなので、そのあたりは適度に読み替えてもらえるとよいかと。
改造方法は2通り
改造方法としては、2通りある。
- ソースコードで追加・変更する
- リソースを追加・変更する
ここでは、1.の例として「GridのTooltipの表示変更」、2.の例として「グリッド値の追加」を行っている。 改造前(通常時)は次の様な表示となっている。
これを改造して、次のように変更してみる。
ソースコードで追加・変更していく
改造と聞いて真っ先に連想する方法はこちらかと。レベルエディタなどのUE4で利用するエディタ関連のコードはすべてUE4\Source\Editor\UnrealEdディレクトリ以下に含まれている。 先のグリッド値のメニューは、STransformViewportToolbar.cppファイルの606行前後にあるので、以下のように「なのです」を追加する。
LocationGridMenuBuilder.AddMenuEntry( FText::AsNumber( CurGridSize ), FText::Format( LOCTEXT("LocationGridSize_ToolTip", "Sets grid size to {0}なのです"), FText::AsNumber( CurGridSize ) ), // ← 変更した FSlateIcon(), FUIAction( FExecuteAction::CreateStatic( &STransformViewportToolBar::SetGridSize, CurGridSizeIndex ), FCanExecuteAction(), FIsActionChecked::CreateStatic( &STransformViewportToolBar::IsGridSizeChecked, CurGridSizeIndex ) ), NAME_None, EUserInterfaceActionType::RadioButton );
すると先の画像のように語尾に「なのです」がつく。ここでは、tooltipを変更している程度だが、Gridの設定自体を無くしたり、スライダーに変更することもできる。
リソースを追加・変更する
エディタに関連する項目がすべてがソースコードで定義されている訳ではなく、リソース(Engine/Config/BaseEditor*.iniファイル)で定義されている設定もある。先のグリッド値の一覧がその1つ。その場合は、ソースを変更することなく、追加・変更が可能となる。
先のGrid値は、先のディレクトリにあるBaseEditorPerProjectUserSettings.iniファイルのDecimalGridSizes変数として定義されている。そこでGrid値200を追加するため「.DecimalGridSizes=200」と1行追加する。
.DecimalGridSizes=1 .DecimalGridSizes=5 .DecimalGridSizes=10 .DecimalGridSizes=50 .DecimalGridSizes=100 .DecimalGridSizes=200 ← 追加した .DecimalGridSizes=500 .DecimalGridSizes=1000 .DecimalGridSizes=5000 .DecimalGridSizes=10000
すると、先の画像のように200のグリッドが追加される。これらiniファイルには、他にも様々な設定がコメントとして書かれているので、他にもいろいろ設定が変更できるかと(全て読んだ訳ではないので、何ができるか全部は知らない)。
といったように
UE4では、このように、ソースコードレベルでガンガンと手を入れることができるので、オレオレUnrealEditorを作るのもさほど難しくないはず。ソースコードも整理されているので、探すのもそう難しくないかと。
で、宣伝。このような内部の話を書いた同人誌「Dive to Unreal Engine 4」をコミケット88で頒布するので、よろしくお願いします!