UE5.3中通过编辑器工具创建大纲菜单文件夹

日常开发中有需求批量在大纲面板批量创建一些文件夹模板,此时若通过工具一键实现则非常方便:

创建文件夹部分需要借助C++编写工具函数实现,接下来就来讲解下具体操作。

1.编写Outliner相关蓝图函数

首先在项目中打开VS工程,引用Outliner相关编辑器模块:

build.cs

csharp 复制代码
using UnrealBuildTool;

public class MyProject : ModuleRules
{
	public MyProject(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", /*此处增加*/"SceneOutliner" });
	}
}

创建蓝图函数库,编写具体接口:

.h:

c++ 复制代码
UCLASS()
class MYPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
	
	UFUNCTION(BlueprintCallable, Category = "CreateOutlinerFolderTool")
	static void CreateOutlinerFolderTemplate(FName FolderName);
};

.cpp:

c++ 复制代码
// Fill out your copyright notice in the Description page of Project Settings.

#include "ToolMenus.h"
#include "SSceneOutliner.h"
#include "LevelEditor.h"
#include "Engine/Selection.h"
#include "Engine/Level.h"
#include "MyBlueprintFunctionLibrary.h"

void UMyBlueprintFunctionLibrary::CreateOutlinerFolderTemplate(FName FolderName)
{
	FModuleManager& ModuleManager = FModuleManager::Get();
	if (ModuleManager.IsModuleLoaded(TEXT("UnrealEd")))
	{
		TWeakPtr<ILevelEditor> LevelEditor = FModuleManager::GetModuleChecked<FLevelEditorModule>(TEXT("LevelEditor")).GetLevelEditorInstance();
		if (LevelEditor.IsValid())
		{
			TArray<TWeakPtr<ISceneOutliner>> SceneOutlinerPtrs = LevelEditor.Pin()->GetAllSceneOutliners();
			for (TWeakPtr<ISceneOutliner> SceneOutlinerPtr : SceneOutlinerPtrs)
			{
				if (TSharedPtr<ISceneOutliner> SceneOutlinerPin = SceneOutlinerPtr.Pin())
				{
					SSceneOutliner* outliner = (SSceneOutliner*)SceneOutlinerPin.Get();
					TArray<FName> folders;
					folders.Add(FolderName);
					outliner->PasteFoldersBegin(folders);
					outliner->PasteFoldersEnd();
				}

				break;
			}
		}
	}
}

这里之前试了下FActorFolders接口发现有问题,应该使用SSceneOutliner的接口进行创建。

2.创建Widget进行测试

编译好后,创建对应编辑器UI进行测试,调用该节点即可:

最终呼出该菜单,点击后即可在场景内创建对应文件夹模板。

相关推荐
一只乔哇噻25 分钟前
java后端工程师进修ing(研一版‖day44)
java·开发语言·学习·算法
技术程序猿华锋29 分钟前
深度解码OpenAI的2025野心:Codex重生与GPT-5 APIKey获取调用示例
人工智能·vscode·python·gpt·深度学习·编辑器
老华带你飞32 分钟前
畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·畅阅读系统小程序
卓码软件测评3 小时前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
Lionel_SSL7 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
记得开心一点嘛7 小时前
手搓Springboot
java·spring boot·spring
老华带你飞7 小时前
租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·租房系统管理平台
独行soc7 小时前
2025年渗透测试面试题总结-66(题目+回答)
java·网络·python·安全·web安全·adb·渗透测试
脑子慢且灵8 小时前
[JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
java·后端·servlet·tomcat·intellij-idea·web
华仔啊9 小时前
SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
java·后端