UE5中自定义属性集报错“ThisClass不命名值”
#define ATTRIBUTE_ACCESSORS(ClassName,PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName,PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
UCLASS()
class MYPROJECT_API UMyAttributeSet : public UAttributeSet
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadOnly,ReplicatedUsing=OnRep_Health)
FGameplayAttributeData Health;

UFUNCTION()
void OnRep_Health(FGameplayAttributeData& OldValue);

ATTRIBUTE_ACCESSORS(ThisClass,Health);
};

原因:
  1. GAMEPLAYATTRIBUTE_PROPERTY_GETTER 的特殊性
    • 与其他三个宏(Getter/Setter/Initter)不同,PROPERTY_GETTER 必须同时接收 类名 和 属性名 两个参数。
    • 它需要这两个参数来生成类似 FindFieldChecked<ClassName::PropertyName> 的代码,以便在反射系统中定位该属性。
    • 你当前的代码只传了 PropertyName,导致引擎试图把变量名 Health 当作类型名去查找,从而报错“不能用作类型”。
  2. 其他宏的特性
    • VALUE_GETTERVALUE_SETTERVALUE_INITTER 只需要属性名,因为它们生成的是成员函数,可以直接访问当前类的成员变量。





posted on 2026-08-25 11:38  也许只能追忆  阅读(2)  评论(0)    收藏  举报