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();
				}	
			}
		}
	}
}
相关推荐
初雪云19 小时前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
幸运小圣2 天前
Buffer 新手入门【Node.js】
node.js·编辑器·vim
*wait for?2 天前
VScode使用uv-创建python虚拟环境
ide·vscode·编辑器
lzx_0022 天前
Linux 开发工具(二) 简单认识一下编辑器 —— vim
linux·编辑器·vim
directx3d_beginner3 天前
42,将移向指定位置改为c++
ue5
golang学习记4 天前
VSCode AI完成任务的仪式感:撒礼花
ide·vscode·编辑器
ue星空6 天前
UE5放了playstart显示badsize解决方案
ue5
mklpo1476 天前
在win7 sp1 系统上安装最新版 的 Visual Studio Code。2026-10-04
ide·vscode·编辑器
Highcharts.js7 天前
图表开发实战总结| 7 条“黄金法则”与“性能铁律”
前端·javascript·vue.js·编辑器·时序数据库·highcharts
directx3d_beginner8 天前
41,从UE5.1迁移到UE5.8排坑全记录
ue5