プログラマーの尾関です。
今回は UE5 でプラグインを作成する方法を紹介します。
- 動作確認バージョン:Unreal Engine 5.3.2
プラグインとは
Unreal Engineにおけるプラグインとは、Unreal Engineの機能を拡張するソフトウェアコンポーネントです。
プラグインの設定は、メニューの「編集 > プラグイン」から確認できます。
ここから特定のプラグインを有効化または無効化できます。
例えばUE 5.3.2時点では「Common UI Plugin」はまだ Beta 版であるため無効化されていますが、これを使いたい場合にはチェックを入れることで有効化できます。
弊社では、例えば入力周りの処理やデバッグ機能をプラグイン化することで、プロジェクト間で機能を再利用できるようにしています。
プラグインの作成手順
プラグインの作成
プラグインを作成するには、メニューの「編集」から「プラグイン」を選びます。
そしてプラグインダイアログのメニュー近くにある「+追加」ボタンをクリックします。
作成するプラグインの種類を選んで、「プラグイン名」「Author (作者名)」「Description (詳細説明)」を入力し、「プラグインを作成」ボタンを押します。
すると “Plugins” フォルダに指定したプラグイン名のデータが追加されます。
ソースコードの編集
作成された PrintHelloLibrary.h を以下のように編集します。
- PrintHelloSampleFunction() の UFUNCTION > meta > DisplayName を “PrintHello” に修正
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#pragma once #include "Kismet/BlueprintFunctionLibrary.h" #include "PrintHelloBPLibrary.generated.h" UCLASS() class UPrintHelloBPLibrary : public UBlueprintFunctionLibrary { GENERATED_UCLASS_BODY() UFUNCTION(BlueprintCallable, meta = (DisplayName = "PrintHello", Keywords = "PrintHello sample test testing"), Category = "PrintHelloTesting") static float PrintHelloSampleFunction(float Param); }; |
またPrintHelloLibrary.cpp を以下のように編集します。
- “Kismet/KismetSystemLibrary.h” を #include
- PrintHelloSampleFunction() の中身に PrintString() を追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include "PrintHelloBPLibrary.h" #include "PrintHello.h" // Printしたい. #include "Kismet/KismetSystemLibrary.h" UPrintHelloBPLibrary::UPrintHelloBPLibrary(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { } float UPrintHelloBPLibrary::PrintHelloSampleFunction(float Param) { // GEngineからGameViewportを取得する. if (!GEngine) return -1; if (!GEngine->GameViewport) return -1; // GameViewportClientを取得する. TObjectPtr pGameViewport = GEngine->GameViewport; if (!IsValid(pGameViewport)) return -1; // UWorldを取得する. UWorld* pWorld = pGameViewport->GetWorld(); if (!IsValid(pWorld)) return -1; // "Hello" を出力する. UKismetSystemLibrary::PrintString(pWorld, "Hello"); return -1; ; } |
Blueprintから呼び出し
作成した “PrintHello” ノードをレベルブループリントなどから呼び出します。
実行して “Hello” の文字が出力されることを確認します。
アイコンを変更する
どんな画像でも良いですが、今回は以下の画像をアイコンにしてみます。
アイコンを設定するにはプラグイン設定画面から「編集」をクリックします。
“Icon” の画像のとなりにある「…」をクリックして画像を設定します。
なお、画像を設定しても表示は切り替わりませんが、プラグイン書き出し時に反映されます
プラグインの書き出し
プラグインの書き出しは、プラグイン設定画面にある「パッケージ」をクリックして、書き出しを行うフォルダを指定すると、そのフォルダに出力されます。
プラグイン作成時に知っておくと便利な機能
以上がプラグインの基本的な作成手順となります。
プラグイン作成時に知っておきたい機能として、”UDeveloperSettings” を使うとプロジェクト設定からパラメータを設定してその値から機能の挙動を変更したり、BPのインスタンスを登録してツールから取得することができて便利です。
例えば、UDeveloperSettingsを使うと、プロジェクト設定に以下のように項目を追加できます。
UDeveloperSettingsの作成手順
*.Build.csの編集
UDeveloperSettingsを使うには、*.Build.cs に以下の記述を追加します。これを設定しないとリンク時にエラーとなります。
1 |
PublicDependencyModuleNames.Add("DeveloperSettings"); |
C++クラスの作成
メニューの「ツール > 新規C++クラス」を選びます。
親クラスに「DeveloperSettings」を選びます。
ファイル名とパスを指定してクラスを作成します。
- 注意点:プロジェクトに直接C++を追加する方法だと、なぜかビルドが通らないことがあります。その場合はエディタからC++を追加する方法で解決できることがあります。
クラスの記述例
GetCategoryName() を指定するとプロジェクト設定でのカテゴリを指定できます。
以下の例では WidgetUI を指定できるように メンバ変数 “TestUIClass” を追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#pragma once // Ungine. #include "CoreMinimal.h" #include "Engine/DeveloperSettings.h" #include "Blueprint/UserWidget.h" #include "TestSettings.generated.h" /** * */ UCLASS(config = TestSettings, defaultconfig) class CAT_API UTestSettings : public UDeveloperSettings { GENERATED_BODY() public: // カテゴリ名. virtual FName GetCategoryName() const override { return "Test Settings"; } public: // 設定項目. UPROPERTY(Config, EditAnywhere, Category = General) TSubclassOf<class UUserWidget> TestUIClass; }; |
実行して確認
「編集 > プロジェクト設定」から項目が追加されているのが確認できます。
UDeveloperSettings の取得方法
UDeveloperSettingsは GetDefault() という関数から取得できます。
1 2 3 |
// Widget生成. auto* pSettings = GetDefault<UCPP_TestSettings>(); UCPP_Infoboard* pWidget = CreateWidget<UCPP_Infoboard>(GetWorld(), pSettings->TestUIClass); |
UDeveloperSettingsはプログラムのどこからでも取得できて便利です。
おしまい
以上、プラグインの作成方法とUDeveloperSettingsの作成方法の紹介でした。
UEでのプラグイン作成の参考となれば幸いです。