Unreal Engine 4 反射机制的实现
2017-08-08 16:45
309 查看
转自:http://blog.csdn.net/noahzuo/article/details/51482255
UE4引擎使用C++语言编写,C++语言本质上不支持反射机制,但是UE4提供了反射机制的实现。
在UE4中提供了
使用方法如下:
因此我们可以在Runtime时根据函数名的不同来进行函数的查找并且触发。
使用
在UE4中提供了ProcessEvent函数来进行触发函数指针对应的函数,具体使用方法如下:
ProcessEvent函数第一个参数是函数指针,第二个参数指的是参数列表,其类型为
使用
还可以使用CallFunction函数来进行对应函数的触发,但是需要进行
并且为了避免内存泄漏,需要注意在使用过后销毁
使用方法如下:
反射机制
反射机制指的是程序可以在运行期间进行检测和修改自己状态的能力。UE4引擎使用C++语言编写,C++语言本质上不支持反射机制,但是UE4提供了反射机制的实现。
FindFunction
函数
在UE4中提供了FindFunction函数,用于在
UObject或者
AActor中查找某个函数名的函数并且返回其函数指针。
使用方法如下:
UFunction *Injured = this->FindFunction(TEXT("Injured"));
因此我们可以在Runtime时根据函数名的不同来进行函数的查找并且触发。
使用ProcessEvent
函数来进行函数的触发
在UE4中提供了ProcessEvent函数来进行触发函数指针对应的函数,具体使用方法如下:UFunction *Injured = this->FindFunction(TEXT("Injured")); if (Injured) { ProcessEvent(Injured, nullptr); }
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; }
额外功效
使用如下的两种方法还可以有一个额外的功能 —— 在C++中进行BP函数的调用。当需要在C++与BP进行通信时,一个做法是在关卡中进行通信,另一个做法则是使用上面的方法进行函数调用。相关文章推荐
- Unreal Engine 4 —— 反射机制的实现
- Android反射机制实现与原理
- c++实现反射机制(两篇)
- C++反射机制的实现
- Unreal Engine 4 蓝图脚本学习 添加输入映射----实现冲刺和望眼镜效果 (3)
- java利用反射机制模拟spring IOC实现
- [转]利用.NET中的反射机制实现IList到DataTable的转换
- viewPager控制滑动速度和时间:利用反射机制实现
- 利用Java的反射与代理机制实现AOP
- 利用java的反射机制实现通用dao
- 利用.NET中的反射机制实现IList到DataTable的转换
- JavaScript 使用for(…in…)实现反射机制
- 利用.NET中的反射机制实现IList到DataTable的转换
- java反射机制(2)- 实践:反射机制+动态代理实现模拟RMI远程方法调用
- PHP 反射机制实现动态代理的代码
- 番外 01:Spring IoC 实现原理简析,Java的反射机制,通过类名创建对象
- C++反射机制:可变参数模板实现C++反射
- jQuery实现select模糊查询(反射机制)
- 利用.NET中的反射机制实现IList到DataTable的转换
- 跟着辛星用PHP的反射机制来实现插件