UE5 编辑器下添加组件

定义一个CallInEditor的函数:

cpp 复制代码
UFUNCTION(BlueprintCallable, CallInEditor)
void AddGenerateComponent();

直接AddComponent,会在移动后消失,且反射没法找到生成的组件。这里需要用到USubobjectDataSubsystem,需要在Build.cs内部添加模块:SubobjectDataInterface,代码如下:

cpp 复制代码
void AAEGenerator::AddGenerateComponent()
{
	if (USubobjectDataSubsystem* Subsystem = Cast<USubobjectDataSubsystem>(GEngine->GetEngineSubsystemBase(USubobjectDataSubsystem::StaticClass())))
	{
		TArray<FSubobjectDataHandle> OutArray;
		Subsystem->GatherSubobjectData(this, OutArray);
		if (OutArray.Num() > 0)
		{
			FAddNewSubobjectParams Params;
			Params.ParentHandle = OutArray[0];
			Params.NewClass = UGeneratorComponent::StaticClass();
			FText FailedReason;
			FSubobjectDataHandle Handle = Subsystem->AddNewSubobject(Params, FailedReason);
			if (Handle.GetData())
			{
				if (UGeneratorComponent* GeneratorComponent = const_cast<UGeneratorComponent*>(Cast<UGeneratorComponent>(Handle.GetData()->GetObject())))
				{
					GeneratorComponent->AttachToComponent(Root, FAttachmentTransformRules::KeepRelativeTransform, NAME_None);
					GeneratorComponent->SetRelativeTransform(FTransform::Identity);
					GeneratorComponent->RegisterComponent();
				}	
			}
		}
	}
}
相关推荐
逆向编程18 小时前
如何在Ubuntu虚拟机中使用Vim编辑器?
ubuntu·编辑器·vim
golang学习记18 小时前
VSCode 官宣:全新默认主题!
ide·vscode·编辑器
波尔德18 小时前
vscode codex 字体大小设置
ide·vscode·编辑器
maplewen.19 小时前
【UE】GAS Gameplay Ability
ue5
帅_shuai_1 天前
UE5.6 Slate独立程序——初始化空白Slate环境
ue5
吴梓穆1 天前
UE5 c++ 模板函数
java·c++·ue5
吴梓穆1 天前
UE5 c++ 暴露变量和方法给蓝图
java·c++·ue5
小夭。1 天前
工具使用-windows在vscode内集成opencode
ide·vscode·编辑器
混迹中的咸鱼1 天前
UE5 网络联机常用命令
网络·ue5
不才小强1 天前
VIM从入门指南
编辑器·vim