😊

[UE5][C++]Editor用モジュールを作成する

2023/06/04に公開

概要

Editor用モジュールは、エディタ上でのみ動作するモジュールです。
このモジュールでゲーム自体には必要ない、開発を快適にする機能を入れます。
※エディタ拡張したり、UE上でしか使わないツール機能の実装をしたり...

こうすることで、ゲームパッケージに余計な機能が入らずスマートになります。

今回は最小限のモジュールになる想定なので、実装は比較的楽になるかと思います。

前提条件

UE5.2でThirdPersonプロジェクトを新規に作成し終えている状態から手順を記載します。
※今回は新規に「Test」プロジェクトを作成しました。

手順

  1. ゲーム用モジュールをコピペする
  2. 1でコピペしたモジュールを、エディタモジュールとして作り直す
  3. uprojectファイルを調整して、モジュールを読み込めるようにする

ゲーム用モジュールをコピペする

Sourceフォルダ以下に「Test」ゲームモジュールがあると思います。
※基本的にはプロジェクト名と同じ名前になっているはずです。

これを複製して、TestEditorモジュールを作成します。

Source
  |-Test                 <- これを複製する
  |-Test.Target.cs  
  |-TestEditor           <- 新規作成(モジュール)
  |-TestEditor.Target.cs <- 新規作成

TestEditorモジュール内部のファイル構成は以下のようにしています。

TestEditor
  |-TestEditor.cpp               
  |-TestEditor.h 
  |-TestEditor.Build.cs        

TestEditor.Build.csのクラス名等が、「Test」になっているはずなので、
「TestEditor」に変更します。

ここまでの作業を行うことで、一旦GenerateProjectFilesに成功することを確認できます。

エディタモジュールとして作り直す

いよいよ本題のエディタモジュールの実装を行っていきます。
具体的には、TestEditorのcppとhファイルを編集・実装します。

TestEditor.h
class TESTEDITOR_API FTestEditorModule : public IModuleInterface
{
public:

	/**
	 * モジュールの初期化
	 */
	virtual void StartupModule() override;

	/**
	 * モジュール破棄前処理
	 */
	virtual void ShutdownModule() override;

};
TestEditor.cpp
IMPLEMENT_MODULE(FTestEditorModule, TestEditor);


/*****************************************************
 * モジュールの初期化
 *****************************************************/
void FTestEditorModule::StartupModule()
{
}


/*****************************************************
 * モジュール破棄前処理
 *****************************************************/
void FTestEditorModule::ShutdownModule()
{
}

モジュールの実装はこれで終了です。

ただこのままではビルドするときにTestEditorモジュールを認識してくれません。
解決するには、Test.Target.cs(ゲームモジュール側)の方に細工が必要です。

Test.Target.cs
ExtraModuleNames.Add("Test");

このようにモジュール参照を追加しているところがあります。
同じ処理を1行追加して、「Test」の部分を「TestEditor」に変えることで、
TestEditorモジュールも参照することが可能です。

Test.Target.cs
ExtraModuleNames.Add("Test");
ExtraModuleNames.Add("TestEditor");

これでビルド時にTestEditorモジュールを認識してくれるようになります。

モジュール読み込み設定

最後にモジュールを読み込めるように、uprojectを書き換える必要があります。
Test.uprojectをテキストファイルとして開き、以下の形になるようにモジュール読み込み追加を行います。

"Modules": [
		{
			"Name": "Test",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		},
		{
			"Name": "TestEditor",
			"Type": "Editor",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
				"Engine",
				"UnrealEd"
			]
		}

TestEditorの方が、今回追加をした部分です。
TypeをEditorにすることで、エディタモジュールであることを示しています。

まとめ

今回は必要最低限のエディタモジュール実装について記載を行いました。
実際開発現場でも自動化はつきものなので、必ず1つは必要になることが多い印象です。

Discussion