目次
はじめに
ブループリントにはグラフを複数作成することができますが、皆さんは使ったことがあるでしょうか?
EventGraphにすべてを記述するとどんどん肥大化して、ノードを探すのにも一苦労といったことになりがちです。
そこで、機能やネットワークポリシーなどでグラフを分割して管理すると、可読性の向上やチーム開発においてはマージのしやすさなどの恩恵があります。
そんなグラフですがテンプレートのような形で毎回手動で作るのはめんどくさいですよね!
そんな悩みを解決するエディタユーティリティを作るため、グラフを自動生成するノードを作ってみました。
▽できること
個人の備忘録としてまとめています。誤った情報がある場合があります。
コメントにてご指摘のほどお願いいたします。
C++でのプロジェクトビルド環境必須です。
UE5.4.3で解説します。
解説
①エディタモジュールの配置
エディタ専用のノードなのでエディタモジュールに実装します。
モジュールについては以下の記事が分かりやすいので、こちらを参考にエディタ用のモジュールを作りましょう。
②モジュールの追加
エディタモジュールのDependencyModuleNamesに以下の要素を追加しておきます。
PublicDependencyModuleNames.AddRange(new string[]
{
"Core",
"CoreUObject",
"UnrealEd", // 追加
"BlueprintGraph" // 追加
});
③コードの追加
エディタモジュールのPublicフォルダに以下を作ります。
▽CustomEditorUtilityNode.h
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "CustomEditorUtilityNode.generated.h"
UCLASS()
class YOUR_API UCustomEditorUtilityNode : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
#if WITH_EDITOR
/** Adds an event graph to the specified Blueprint.
*
* @param Blueprint Target Blueprint
* @param GraphName Create a new graph with this name
* @return bool True if the graph was added successfully
*/
UFUNCTION(BlueprintCallable, Category = "CustomEditorUtility", meta=(OnlyIncludeInEditor))
static bool AddGraphToBlueprint(UBlueprint* Blueprint, const FString& GraphName);
#endif
};
▽CustomEditorUtilityNode.cpp
#include "CustomEditorUtilityNode.h"
#include "Kismet2/BlueprintEditorUtils.h"
#include "Kismet2/KismetEditorUtilities.h"
bool UCustomEditorUtilityNode::AddEGraphToBlueprint(UBlueprint* Blueprint, const FString& GraphName)
{
if (!Blueprint)
{
UE_LOG(LogTemp, Error, TEXT("Blueprint is null!"));
return false;
}
// すでに同じ名前のイベントグラフが存在しないか確認
for (const UEdGraph* Graph : Blueprint->UbergraphPages)
{
if (Graph->GetName() == GraphName)
{
UE_LOG(LogTemp, Warning, TEXT("Graph '%s' already exists!"), *GraphName);
return false;
}
}
// 新しいイベントグラフを作成
UEdGraph* NewGraph = FBlueprintEditorUtils::CreateNewGraph(
Blueprint,
FName(*GraphName),
UEdGraph::StaticClass(),
UEdGraphSchema_K2::StaticClass()
);
if (!NewGraph)
{
UE_LOG(LogTemp, Error, TEXT("Failed to create new graph!"));
return false;
}
// Blueprintに追加
FBlueprintEditorUtils::AddUbergraphPage(Blueprint, NewGraph);
// Blueprintを更新
FBlueprintEditorUtils::MarkBlueprintAsStructurallyModified(Blueprint);
FKismetEditorUtilities::CompileBlueprint(Blueprint);
UE_LOG(LogTemp, Log, TEXT("New event graph '%s' added successfully!"), *GraphName);
return true;
}
これでビルドに成功するとノードが利用できるようになります!
※エディタ用のBPなのでランタイム想定のBPでは配置できないはずです。
④ツールの追加
エディタに戻り、コンテンツを右クリック->エディタユーティリティ->エディタユーティリティブループリントを選択します。
アセットアクションユーティリティを選択します。
名前はEUB_AddCustomGraphとしました。
アセットを開き、クラスのデフォルトからブループリント用のアクションであるにチェックを付けます。
⑤ツールの編集
"ほげ"と"ふが"を追加する関数GenerateGraph"HOGE"_"FUGA"を作りました。
エディタで呼び出す が有効になっていることを確認しましょう。
選択されているブループリントアセットに対してHOGEとFUGAを追加するようにします。※エラー表示などはbool値でよしなにしてください。
⑥ツールの使い方
グラフを追加したいBPをコンテンツブラウザ上で右クリック
->スクリプト化された~から作成した関数を押します。
やった!!!
完
最後に
需要があれば、イベントノードの生成とかも書くかもしれません。
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやX(Twitter)のフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。