• Unreal Engine 4 反射机制的实现


    转自: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进行通信时,一个做法是在关卡中进行通信,另一个做法则是使用上面的方法进行函数调用。

  • 相关阅读:
    hibernate 笔记二
    log4j详解及简易搭建
    hibernate 笔记一
    【工作心得】timesten应用(安装配置篇)
    【转】boost 内存池
    【转】基于Socket的UDP和TCP编程介绍
    【工作心得】timesten应用(开发篇)
    【读书笔记】UNIX进程间通信
    【读书笔记】硬链接与软链接
    【转】Linux Socket编程
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/7307644.html
Copyright © 2020-2023  润新知