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

embedded/2024/11/13 14:28:16/

日常开发中有需求批量在大纲面板批量创建一些文件夹模板,此时若通过工具一键实现则非常方便:
在这里插入图片描述
创建文件夹部分需要借助C++编写工具函数实现,接下来就来讲解下具体操作。

1.编写Outliner相关蓝图函数

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

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:

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

.cpp:

// 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进行测试,调用该节点即可:
在这里插入图片描述
最终呼出该菜单,点击后即可在场景内创建对应文件夹模板。


http://www.ppmy.cn/embedded/136886.html

相关文章

深度学习:AT Decoder 详解

AT Decoder 详解 在序列到序列的模型架构中&#xff0c;自回归解码器&#xff08;Autoregressive Translator, AT Decoder&#xff09;是一种核心组件&#xff0c;其设计目标是确保生成的序列在语义和语法上的连贯性与准确性。自回归解码器通过逐步、依赖前一输出来生成新的输…

Django中间件应该怎么使用

Django 中间件是一种轻量级的、低级别的插件系统&#xff0c;用于在请求到达视图之前或响应返回给客户端之后处理请求和响应。中间件可以用于各种任务&#xff0c;如身份验证、日志记录、跨域资源共享&#xff08;CORS&#xff09;等。 以下是如何在 Django 中使用中间件的详细…

【Leecode】Leecode刷题之路第46天之全排列

题目出处 46-全排列-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 46-全排列-官方解法 预备知识 回溯法&#xff1a;一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解…

redis用法(二)

文章目录 02-redis数据类型篇生产环境下的redis实况图 1.全局命令redis数据存储格式set设置k-v查看当前redis的key的数量危险命令&#xff0c;新手请在于超老师陪同下执行为什么危险&#xff1f;如何正确搜索redis的key 查看库下有多少个key查询redis库信息切换redis库查看key是…

用Dify搭建AI知识库

Dify 可以上传各种格式文档和抓取网页数据训练自已的知识库 一 安装 1 Docker安装 我基于Docker来安装的&#xff0c;所以本机先装Docker Desktop, Docker 安装方法在这里 2 Dify 安装 git clone https://github.com/langgenius/dify.git cd dify/docker copy .env.exampl…

SQL EXISTS谓词

谓词时返回值为真值&#xff08;true、false或unknown&#xff09;的函数。EXISTS与其他谓词不同&#xff0c;它接受的参数是行的集合。 输入值为一行的谓词叫做“一阶谓词”&#xff08;例如>、<、 及 LIKE等&#xff09;&#xff1b;输入值为行的集合的谓词叫做“二阶…

【Android】轮播图——Banner

引言 Banner轮播图是一种在网页和移动应用界面设计中常见的元素&#xff0c;主要用于在一个固定的区域内自动或手动切换一系列图片&#xff0c;以展示不同的内容或信息。这个控件在软件当中经常看到&#xff0c;商品促销、热门歌单、头像新闻等等。它不同于ViewPgaer在于无需手…

Python学习------第四天

Python的判断语句 一、布尔类型和比较运算符 二、 if语句的基本格式 if语句注意空格缩进&#xff01;&#xff01;&#xff01; if else python判断语句的嵌套用法&#xff1a;