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();
				}	
			}
		}
	}
}
相关推荐
sz4972385993 小时前
vscode多种编译环境共存的方法
ide·vscode·stm32·编辑器·esp32
chudonghao3 小时前
[UE学习笔记][基于源码] 运行时网格 PMC / DMC / RMC
笔记·学习·ue5
代数狂人4 小时前
《深入浅出Godot 4与C# 3D游戏开发》第二章:编辑器导航
3d·编辑器·游戏引擎·godot
吴梓穆5 小时前
UE5 C++ 使C++创建动画蓝图
开发语言·c++·ue5
吴梓穆8 小时前
UE5 动画状态机
ue5
宁&沉沦8 小时前
前端开发专用的 Cursor 四大模式「快捷切换 + 指令模板」,直接复制就能用,覆盖 90% 日常场景
前端·编辑器
电子云与长程纠缠18 小时前
UE5 两种方式解决Decal Actor贴花拉伸问题
学习·ue5·游戏引擎
妙为19 小时前
UE5中武器未跟随角色
ue5·gas·gameplay
白菜欣1 天前
Linux —《从零上手Vim:核心用法全解析》
linux·编辑器·vim
平行云1 天前
虚拟直播混合式2D/3D应用程序实时云渲染推流解决方案
linux·unity·云原生·ue5·图形渲染·实时云渲染·像素流送