上一篇我们介绍了蓝图可实现事件(BlueprintImplementableEvent),跟它类似的另一种实现方式:蓝图本地事件(BlueprintNativeEvent)要更像C++的虚函数一些
二者区别
蓝图可实现事件(BlueprintImplementableEvent)是不允许C++实现它的,只能且必须在C++中声明它,并要求蓝图实现它(必须)
蓝图本地事件(BlueprintNativeEvent)则要求C++实现一个版本,同时也允许蓝图重载C++的函数(非必须)蓝图还能在函数体中调用到C++实现的那个版本
如下图的“父类:Trace for Physics Bodies”就是蓝图本地事件(BlueprintNativeEvent)在对其C++父类实现的函数体的调用
BlueprintNativeEvent的使用
- 在C++头文件中声明蓝图本地事件(BlueprintNativeEvent)
.cpp 文件中实现其函数体,这里需要使用"函数名_Implementation"来实现函数体。编译代码- 在蓝图中选择“覆盖”(override)
- 在蓝图中重载函数
若该函数是蓝图原有函数,需要改为C++函数
则应该在进行C++添加声明之前,先修改函数名称以区别原有蓝图函数和重载的函数(如改原来的函数名为"BP_函数名")并在重载完C++函数以后手动进行函数引用的替换(即将用到这个函数的地方手动替换成新的重载函数)
代码
.h
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void NotifyQuestActor(AActor* Actor);
UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
bool TraceForPhysicsBodies(AActor*& HitActor, UPrimitiveComponent*& HitComponent);
.cpp
bool UGrabber::TraceForPhysicsBodies_Implementation(AActor *& HitActor, UPrimitiveComponent *& HitComponent)
{
return false;
}
|