You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UE5.2插件编译报错:已删除函数无法引用(黑板组件相关)

解决Unreal Engine 5.2自定义插件编译报错:删除函数无法引用

问题原因

从提供的FBlackboard代码来看,UE5.2默认使用自定义的FBlackboard::FKey结构体(而非旧版的uint8),该结构体明确删除了**FKey(uint8)构造函数和operator uint8()转换运算符**。报错的核心是:你尝试将UBlackboardComponent::GetKeyID返回的FKey类型,直接赋值给uint16或其他基础类型,编译器在隐式转换过程中试图调用被删除的函数。

解决方案

1. 使用正确的变量类型

将targetActorKey的类型声明为FBlackboard::FKey,而非uint16或uint8:

// 正确声明变量
FBlackboard::FKey targetActorKey = BBComponent->GetKeyID("TargetActor");

2. 若需转换为uint16(显式转换)

如果业务逻辑确实需要将FKey转为uint16,使用显式类型转换(结构体已重载operator uint16(),允许合法转换):

FBlackboard::FKey targetActorKey = BBComponent->GetKeyID("TargetActor");
uint16 keyAsUint16 = static_cast<uint16>(targetActorKey);

3. 排查潜在的uint8转换

检查代码中所有涉及FKey的地方,确保没有尝试将其隐式或显式转换为uint8——这会直接触发删除函数的报错。

验证代码示例

修正后的完整调用代码:

// 初始化黑板(原代码无需修改)
BBComponent = CreateDefaultSubobject<UBlackboardComponent>(TEXT("BlackBoardComp"));
UBlackboardData* const bbData = BehaviorTree->BlackboardAsset;
BBComponent->InitializeBlackboard(*bbData);

// 获取黑板键的正确方式
FBlackboard::FKey targetActorKey = BBComponent->GetKeyID("TargetActor");

// 如需转为uint16,显式转换
uint16 keyUint16 = static_cast<uint16>(targetActorKey);

内容的提问来源于stack exchange,提问作者matheus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:05:12