2.0 KiB
Raw Blame History

BlueprintNativeEvent

  • 功能描述: 可以在蓝图总覆盖实现但是也在C++中提供一个默认实现。

  • 元数据类型: bool

  • 引擎模块: Blueprint

  • 作用机制: 在FunctionFlags中增加FUNC_EventFUNC_BlueprintEvent

  • 常用程度: ★★★★★

可以在蓝图总覆盖实现但是也在C++中提供一个默认实现。

需要在CPP中声明名称与主函数相同的附加函数但是末尾添加了_Implementation。如果未找到任何蓝图覆盖该自动生成的代码将调用“ [FunctionName]_Implementation”方法。一般用在OnXXX之类的函数上在C++提供实现这样如果蓝图中没有覆盖的时候就可以默认调用C++中默认实现版本。 BlueprintNativeEvent没加BlueprintCallable的话就只能在CPP里调用因此一般也要配合加上BlueprintCallable。

测试代码:

//FunctionFlags:	FUNC_Native | FUNC_Event | FUNC_Public | FUNC_BlueprintCallable | FUNC_BlueprintEvent 
UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
void MyFunc_NativeEvent();

void AMyFunction_Default::MyFunc_NativeEvent_Implementation()
{
	GEngine->AddOnScreenDebugMessage(-1, 3.f, FColor::Red, "MyFunc_NativeEvent_Implementation");
}

效果展示:

Untitled

原理:

在调用MyFunc_NativeEvent的时候内部FindFunctionChecked会根据名字查找如果在蓝图中有定义则会找到蓝图中的实现版本。否则的话则会找到execMyFunc_NativeEvent这个实现版本从而调用MyFunc_NativeEvent_Implementation。

DEFINE_FUNCTION(AMyFunction_Default::execMyFunc_NativeEvent)
{
	P_FINISH;
	P_NATIVE_BEGIN;
	P_THIS->MyFunc_NativeEvent_Implementation();
	P_NATIVE_END;
}

void AMyFunction_Default::MyFunc_NativeEvent()
{
	ProcessEvent(FindFunctionChecked(NAME_AMyFunction_Default_MyFunc_NativeEvent),NULL);
}