转自:http://blog.csdn.net/noahzuo/article/details/51482255

反射机制

反射机制指的是程序可以在运行期间进行检测和修改自己状态的能力。

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 反射机制的实现的更多相关文章

  1. UNITY3D在IOS开发下的反射机制限制

    IOS上的反射是部分支持,支持使用反射读取源代码,但不支持使用反射动态生成可执行代码,下面是限制反射的命名空间:ProfilerReflection.EmitReflection.Emit.Save ...

  2. 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二

    AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound  ...

  3. 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)

    在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...

  4. Unreal Engine 4 基于Kajiya-Kay的材质迭代

    转自:http://www.52vr.com/article-859-1.html 在先前的文章Unreal Engine 4 —— Kajiya-Kay Shading在UE4中的实现 中过了一遍怎 ...

  5. 用Unreal Engine绘制实时CG影像

    转自:http://www.unrealchina.net/portal.php?mod=view&aid=225 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么 ...

  6. 从Unreal Engine 3到Unreal Engine 4

    Unreal Engine 4公布好长好长时间了.直到近期才有时间细致去看一下. TimSweeney老大一句话"IF YOU LOVE SOMETHING, SET IT FREE&quo ...

  7. 剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染

    一.概述 1.1 数字人类的概要 数字人类(Digital Human)是利用计算机模拟真实人类的一种综合性的渲染技术.也被称为虚拟人类.超真实人类.照片级人类. 它是一种技术和艺术相结合的综合性模拟 ...

  8. 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染

    目录 三.眼球渲染 3.1 眼球的构造及理论 3.1.1 眼球的构造 3.1.2 眼球的渲染理论 3.2 眼球的渲染技术 3.2.1 角膜的半透和光泽反射 3.2.2 瞳孔的次表面散射 3.2.3 瞳 ...

  9. 剖析Unreal Engine超真实人类的渲染技术Part 3 - 毛发渲染及其它

    目录 四.毛发渲染 4.1 毛发的构造及渲染技术 4.1.1 毛发的构造 4.1.2 Marschner毛发渲染模型 4.1.3 毛发的间接光照 4.2 毛发的底层实现 4.3 毛发的材质解析 4.3 ...

随机推荐

  1. net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法

    解决问题方法如下: 在dos下运行net  start mysql 不能启动mysql!提示发生系统错误 5:拒绝访问!切换到管理员模式就可以启动了.所以我们要以管理员身份来运行cmd程序来启动mys ...

  2. CentOS 6.6安装postgresql9.6.6

    一.环境介绍 系统平台:CentOS release 6.6 (Final) Postgresql:postgresql-9.6.6 二.安装过程 1.安装依赖包 yum -y install gcc ...

  3. JavaScript权威指南——跳转语句

    前言:JavaScript中有一类语句叫做跳转语句.从名称就可以看出,它使得JavaScript的执行可以从一个位置跳转到另一个位置. return语句让解释器跳出循环体的执行,并提供本次调用的返回值 ...

  4. 【Android SDK Manager】SDk国内镜像下载地址

    中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/IPV6: http://mirrors.opencas.org 端口: ...

  5. PAT 数列求和-加强版   (20分)(简单模拟)

    给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A).例如A=1, N=3时,S=1+11+111=123 输入格式: 输入数字A与 ...

  6. SIM800C SIM卡唯一标识符ICCID

    /******************************************************************************* * SIM800C SIM卡唯一标识符 ...

  7. OK335xS Linux Qt make: icpc: Command not found

    OK335xS Linux Qt make: icpc: Command not found 一.出错现象: make: icpc: Command not found make: *** [main ...

  8. 【opencv基础】图像翻转cv::flip详解

    前言 在opencv中cv::flip函数用于图像翻转和镜像变换. 具体调用形式 void cv::flip( cv::InputArray src, // 输入图像 cv::OutputArray ...

  9. Nuxt.js实践篇

    nuxt.js 追求完美,相信大家都是这样的.因为前后端分离的弊端性,在项目构建时,浏览器并不会捕捉到项目的内容,所以开始,笔者决定引入nuxt.js文件来配合vue完成Server Slider R ...

  10. 为什么我们不应该使用微信或者 QQ 作为团队协作的 IM 工具?

    如果你的团队没有觉得微信是低效的团队 IM 工具,那只有两种可能: 团队成员很少使用微信进行私人的生活和娱乐. 你就是一个低效的团队,而且还不自知. 本文内容 微信,连接一切 每个人都有微信 微信,低 ...