这篇博客讲解了在UE4中,反射机制的实现。
反射机制
反射机制指的是程序可以在运行期间进行检测和修改自己状态的能力。
UE4引擎使用C++语言编写,C++语言本质上不支持反射机制,但是UE4提供了反射机制的实现。
FindFunction
函数
在UE4中提供了FindFunction
函数,用于在UObject
或者AActor
中查找某个函数名的函数并且返回其函数指针。
使用方法如下:
UFunction *Injured = this->FindFunction(TEXT("Injured"));
- 1
因此我们可以在Runtime时根据函数名的不同来进行函数的查找并且触发。
使用ProcessEvent
函数来进行函数的触发
在UE4中提供了ProcessEvent函数来进行触发函数指针对应的函数,具体使用方法如下:
UFunction *Injured = this->FindFunction(TEXT("Injured"));
if (Injured)
{
ProcessEvent(Injured, nullptr);
}
- 1
- 2
- 3
- 4
- 5
ProcessEvent函数第一个参数是函数指针,第二个参数指的是参数列表,其类型为void*
类型。
使用CallFunction
函数进行触发
还可以使用CallFunction函数来进行对应函数的触发,但是需要进行FFrame
的建立。
并且为了避免内存泄漏,需要注意在使用过后销毁FFrame
。
使用方法如下:
UFunction *Injured = this->FindFunction(TEXT("Injured"));
if (Injured)
{
void* params = nullptr;
FFrame* frame = new Frame(this, Injured, params);
CallFunction(*frame, params, Injured);
delete frame;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
额外功效
使用如下的两种方法还可以有一个额外的功能 —— 在C++中进行BP函数的调用。当需要在C++与BP进行通信时,一个做法是在关卡中进行通信,另一个做法则是使用上面的方法进行函数调用。