【UE5】プラグインの作成方法
プログラマーの尾関です。
今回は 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” に修正
#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() を追加
#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 に以下の記述を追加します。これを設定しないとリンク時にエラーとなります。
PublicDependencyModuleNames.Add("DeveloperSettings");
C++クラスの作成
メニューの「ツール > 新規C++クラス」を選びます。
親クラスに「DeveloperSettings」を選びます。
ファイル名とパスを指定してクラスを作成します。
プロジェクトに直接C++を追加する方法だと、なぜかビルドが通らないことがあります。その場合はエディタからC++を追加する方法で解決できることがあります。
クラスの記述例
GetCategoryName() を指定するとプロジェクト設定でのカテゴリを指定できます。
以下の例では WidgetUI を指定できるように メンバ変数 “TestUIClass” を追加しました。
#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() という関数から取得できます。
// Widget生成.
auto* pSettings = GetDefault<UCPP_TestSettings>();
UCPP_Infoboard* pWidget = CreateWidget<UCPP_Infoboard>(GetWorld(), pSettings->TestUIClass);
この関数を使うとプログラムのどこからでも取得できて便利です。
おしまい
以上、プラグインの作成方法とUDeveloperSettingsの作成方法の紹介でした。
UEでのプラグイン作成の参考となれば幸いです。