0
Help us understand the problem. What are the problem?

posted at

updated at

[UE5] World Outliner上のフォルダのリストを取得する方法について(おまけ付き)

はじめに

突然ですが、World Outlinerにおけるフォルダのリストを欲しくなったことはありませんか?
僕はあります。今回はその取得方法についてご紹介します。C++が必要ですがサクッとできます。
image.png

C++コード

フォルダの取得には、FActorFoldersForEachFolder関数を使用します。少し見慣れない書き方になっていますが、これはTFunctionRefというものを使っているためです。

MyEditorBlueprintFunctionLibrary.cpp
#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyEditorBlueprintFunctionLibrary.generated.h"

UCLASS()
class ●●●●EDITOR_API UMyEditorBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

	UFUNCTION(BlueprintCallable)
	static TArray<FName> GetActorFolderNames(UWorld* World, bool bUseSort);
};
MyEditorBlueprintFunctionLibrary.h
#include "MyEditorBlueprintFunctionLibrary.h"
#include "EditorActorFolders.h"

TArray<FName> UMyEditorBlueprintFunctionLibrary::GetActorFolderNames(UWorld* World, bool bUseSort)
{
	TArray<FName> OutActorFolderNames;

    // 全フォルダ(FFolder)に対してForEach処理を実行
	FActorFolders::Get().ForEachFolder(*World, [&OutActorFolderNames](const FFolder& Folder)
	{
		OutActorFolderNames.Add(Folder.GetPath());
		return true;
	});
	if(bUseSort)
	{
		OutActorFolderNames.Sort();
	}
	return OutActorFolderNames;
}

なお、上記のコードはエディタ専用の機能を使っているため、Editorモジュールで組むことを強く推奨します。Editorモジュールの作成方法については下記記事を参考にするか、

こちらの無料プラグインを使うのがオススメです。サクッとモジュールを追加できるので重宝してます。

話を戻して…
これで作成したGet Actor Folder Namesノードを下記のように組んで実行すると…
image.png
結果は以下のようになります。ちゃんと取れてますね!

LogBlueprintUserMessages: [XXX] A
LogBlueprintUserMessages: [XXX] B
LogBlueprintUserMessages: [XXX] B/B-Child
LogBlueprintUserMessages: [XXX] C

応用例

これだけだと微妙なので、具体的にどんなことに役立つのかについて軽く…

まず、ActorのSetFolderPathノードを使うとそのActorを特定のフォルダに移動することができます。ここでのフォルダとは当然World Outlinerでのフォルダを指します。そして、そのSetFolderPathノードと今回ご紹介した内容を併用すると…特定のフォルダ名が見つかったらそこに選択中のActorを移動させるという処理を組めます。
image.png

これだけだと特に使い道はないですし、標準のMove To機能でいいじゃん!となりますが、

例えば…

  • 複数のActorを特定のルールに基づいて一括でフォルダ移動・整理
  • レベル上に特定のActor・BPを配置したら自動的に最適なフォルダに移動

といったエディタ拡張を組むことができます。どうでしょ?便利そうじゃないですか?

さいごに

開発規模が大きくなるに連れてWorld Outliner上のActor数は膨れがちです。更に、UE5のWorld Partitionを活用していくとUE4時代とは比にならないぐらい膨れることもあります。そんなときに今回の内容がきっと役に立つはずです。是非一度試してみてください!

おしまい

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?