目录

一、UPROPERTY

二、UFUNCTION

关于纯函数的UFUNCTION说明符效果:

关于BlueprintImplementableEvent:

关于BlueprintNativeEvent:


U++中属性使用UPROPERTY宏来定义属性元数据和变量说明符,使用UFUNCTION宏来声明UFunction,并为UFunction定义一些说明符,UPROPERTY和UFUNCTION分别让属性与函数能够被UE反射系统识别。


一、UPROPERTY

        实践了解一下比较常见的说明符的作用

        以上属性在Instance中细节面板可见:

        在类默认面板中:

        在蓝图中搜索Category可以看到在TEST目录下方

        Blueprint:

        Config说明符:标记为 Config的属性其值不会被保存在蓝图资产或C++类的默认值中,而是被保存到指定的项目配置文件中。

        用例:

UCLASS(config=Game) // 指定这个类的配置项保存在 Game 类型的配置文件中(即 DefaultGame.ini 等)
class YOURGAME_API UYourGameSettings : public UObject
{
    GENERATED_BODY()

public:
    UYourGameSettings();

    // 这个属性将从配置文件中读取
    UPROPERTY(Config, EditAnywhere, Category = "Settings")
    float PlayerWalkSpeed;

    // 这个属性也将从配置文件中读取,并且可以在编辑器中编辑,但编辑的是配置文件中的值
    UPROPERTY(Config, EditAnywhere, Category = "Settings")
    int32 MaxNumberOfPlayers;
};

        EditFixedSize为固定大小的数组,本例中初始化

        TArray容量为3,不可改变。


二、UFUNCTION

关于纯函数的UFUNCTION说明符效果:

关于BlueprintImplementableEvent:

        1.不需要++实现,可在C++中调用,可传递参数

        2.蓝图可实现,可不实现,没实现则调用时什么都不发生

        3.命名使用有意义的名称,如 OnXXXHandleXXX

        4.考虑蓝图没实现的情况

        声明:

UFUNCTION(BlueprintImplementableEvent, Category="Events")
void OnCustomEvent();

        调用:

void AUFUNCTION_Test_Actor::BeginPlay()
{
	Super::BeginPlay();
	OnCustomEvent();
	
}

        实现:

关于BlueprintNativeEvent:

        在头文件中声明:

UFUNCTION(BlueprintNativeEvent, Category="Events")
void OnCustomEvent();
virtual void OnCustomEvent_Implementation();

        实现:

void AMyActor::OnCustomEvent_Implementation()
{
    UE_LOG(LogTemp, Warning, TEXT("调用了 C++ 默认实现"));
    // 默认逻辑写这里
}

        调用:

void AMyActor::TriggerEvent()
{
    OnCustomEvent(); // 优先调用蓝图实现,否则调用 C++ 默认实现
}

        蓝图中调用、重载:

可以调用C++父类实现

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐