在C++代码中我们可能会遇到这两个对函数的定义
UFUNCTION(BlueprintImplementableEvent, Category = "TEST")
void testFunc1()
UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "TEST")
void testFunc2()
BlueprintImplementableEvent修饰的函数,函数体必须在蓝图中实现,C++不能写函数体。为的是让C++中能调用蓝图实现的方法,换句话说是可以让c++触发蓝图事件。
BlueprintNativeEvent修饰的函数,C++和蓝图中都可以实现函数体,C++中的函数体必须是
void UMyClass::testFunc2_Implementation()
{
// C++ 默认行为
}
蓝图中的实现可以覆盖c++实现,当蓝图覆盖实现时,C++的Implementation不会调用,除非在蓝图中主动调用Parent。
如果 C++ 必须要有默认逻辑 → 使用 BlueprintNativeEvent
例如 AI 行为、角色事件、系统机制。
如果完全由蓝图设计 → 使用 BlueprintImplementableEvent
例如 UI 动画、按键响应、触发器效果。