UE4 反射机制

B站教学链接:https://space.bilibili.com/449549424?spm_id_from=333.1007.0.0
很多人问我虚幻与蓝图之间怎么进行通信,UE4 使用其自身的反射实现,可启用动态功能,如垃圾回收、序列化、网络复制和蓝图/C++ 通信。今天就跟大家说一下虚幻的反射机制。
第一 虚幻的构建系统的核心重点是UBT和UHT,UBT的作用是收集和构建编译环境,调用UHT生成代码,然后调用真正的编译器进行编译 - UHT的作用是翻译项目中所有C++的代码标记为真正的C++代码(如UCLASS/GENERATED_BODY等等),它属于UBT工作流程中的一环。
上面写的需要关注的有两点: 1. UEC++的代码必须通过UE自己的构建体系 2. UEC++的代码必须要通过UHT进行翻译成真正的C++代码 3. UE的项目里真正进入编译阶段的,全部都是标准C++的代码。

第二 UEC++的代码必须要依赖于一个UE项目,其基本项目结构为:

Example\GWorld\Source>tree /a /f

| GWorld.Target.cs

|

—GWorld

    GWorld.Build.cs

    GWorld.cpp

    GWorld.h

    Public/

    Private/

其中各个文件的职责为: - *.Target.cs是用来控制的是生成的可执行程序的外部编译环境,就是所谓的Target。比如,生成的是什么Type(Game/Client/Server/Editor/Program),开不开启RTTI(bForceEnableRTTI),CRT使用什么方式链接(bUseStaticCRT)等等。- .Build.cs控制的是Module编译过程,由它来控制所属Module的对其他Module的依赖、文件包含、链接、宏定义等等相关的操作,.Build.cs告诉UE的构建系统,它是一个Module,并且编译的时候要做哪些事情。

第三 给大家介绍一下虚幻C++ 一些宏的含义

GENERATED_BODY() :标识的类的成员默认是private的,GENERATED_BODY标识的类需要声明无参数的构造函数
GENERATED_UCLASS_BODY:可以不声明构造函数(如果要实现构造函数需要加上const FObjectInitializer& ObjectInitializer参数)
UPROPERTY():生成变量的反射数据,它允许变量被复制、被序列化,并可从蓝图中进行访问。垃圾回收器还使用它们来追踪对 UObject 的引用数。
UFUNCTION():生成函数的反射数据,UFUNCTION 允许类方法从蓝图中被调用,并在其他资源中用作 RPC。
TSubClassOf():是提供 UClass 类型安全性的模板类。
USTRUCT():生成结构体的反射数据
UENUM():生成枚举的反射数据
UCLASS() - 告知虚幻引擎生成类的反射数据。类必须派生自 UObject。

关键字:
BlueprintType:可以生成蓝图变量的类型

VisibleAnywhere:仅仅可见

EditAnywhere:任何地方可以编辑

Meta:元数据说明符

BlueprintImplementableEvent: C++ 代码调用蓝图中定义的函数。

BlueprintNativeEvent:C++本地有定义,蓝图可以覆写

Blueprintable - 此类可由蓝图延展。

BlueprintReadOnly - 此属性只可从蓝图读取,不可写入。

Category - 定义此属性出现在编辑器 Details 视图下的部分。用于组织。

BlueprintCallable - 可从蓝图调用此函数
常见的基本都在这里,其他的一些需要大家在学习的过程中去掌握和了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞起的猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值