如何在 C++ 中重写 BlueprintNativeEvent 函数?

Roi*_*ton 3 c++ polymorphism unreal-engine4 unreal-blueprint

我想BlueprintNativeEvent在 C++ 的派生类中实现标记为 的函数的一部分,而其他人则在派生蓝图类中实现该函数的一部分。

然而,该函数似乎不是一个virtual函数,所以我不知道如何override在 C++ 中使用它(尽管在蓝图中它可以工作)。来自 GameplayAbilitySystem 的示例:

UFUNCTION(BlueprintNativeEvent, Category="Calculation")
float CalculateBaseMagnitude(const FGameplayEffectSpec& Spec) const;
Run Code Online (Sandbox Code Playgroud)

如何在 C++ 的派生类中重写它?

Roi*_*ton 5

在编译之前,UnrealHeaderTool会在基类中生成virtuala 的函数。BlueprintNativeEvent上面的例子看起来像:

virtual float CalculateBaseMagnitude_Implementation(const FGameplayEffectSpec& Spec) const;
Run Code Online (Sandbox Code Playgroud)

因此,在派生的 C++ 类中,像往常一样在 C++ 中重写(并实现)该函数:

class PROJECT_API UGMMCCustom : public UGameplayModMagnitudeCalculation
{
    float CalculateBaseMagnitude_Implementation(const FGameplayEffectSpec& Spec) const override
    {
        return {}; // Add your custom implementation in the cpp file.
    }
}
Run Code Online (Sandbox Code Playgroud)