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();
				}	
			}
		}
	}
}
相关推荐
小墨宝20 小时前
vscode自带内网穿透
ide·vscode·编辑器
量子炒饭大师1 天前
【2026全新 Claude Code + VScode + CCswitch + 接入deepseek-v4-pro 套餐】从环境配置到实战演练:Claude Code彻底开箱指南!
ide·vscode·编辑器·deepseek·claude code·cc-switch
Dvesiz1 天前
【ClaudeCode平替(免费)】OpenCode 完整安装与 VSCode 使用指南
ide·vscode·编辑器·github·ai编程·claude·visual studio code
芯码学徒1 天前
vscode上如何免费使用opencode插件
ide·vscode·编辑器·opencode
播播资源1 天前
Visual Studio Code如何接入 API 使用OpenAI、claude、Gemini等最新大模型,国内直连教程
ide·vscode·编辑器
神秘剑客_CN1 天前
MarkText快捷键大全
编辑器
DoomGT1 天前
Design - 一些免费图标网站
ue5·ue4·虚幻·虚幻引擎·unreal engine
小贺儿开发1 天前
Unity3D 编辑器对象锁定工具
unity·编辑器·编程·工具·对象·互动·拓展
shimly1234561 天前
VSCode:“princexml“ is required to be installed
ide·vscode·编辑器
拙慕JULY1 天前
AI 驱动的 Github 代码库理解工具——DeepWiki
ide·vscode·编辑器