Happy My Life

日常とか技術とか

UnrealEditorを改造する

UE4のメリットの一つにソースコードが公開されているけど、これはゲームエンジンのみならずエディタ(UnrealEditorなど)の主要なソースコードも含まれている。

つまり、オレオレUnrealEditorを作成できる。企業や使う人によっては「デフォルト設定は微妙に使いづらいので、なんとかしたい」というニーズも(少ないかもしれないが)あるはず。ということで、UnrealEditor改造の入門編を書いてみる。

ただ、今回はうっかりUE4のmasterブランチ(UE4.10)で試してしまったので、以下で示したソースコードの行番号は今後ズレるかもしれない。ま、ソースコード自体はそう変化はしないはずなので、そのあたりは適度に読み替えてもらえるとよいかと。

改造方法は2通り

改造方法としては、2通りある。

  1. ソースコードで追加・変更する
  2. リソースを追加・変更する

ここでは、1.の例として「GridのTooltipの表示変更」、2.の例として「グリッド値の追加」を行っている。 改造前(通常時)は次の様な表示となっている。

normal

これを改造して、次のように変更してみる。

modified

ソースコードで追加・変更していく

改造と聞いて真っ先に連想する方法はこちらかと。レベルエディタなどの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で頒布するので、よろしくお願いします!