UE4属性反射宏UPROPERTY和UFUNCTION
UPROPERTY()
UPROPERTY是UE4中的属性反射宏。
在C++中是没有反射概念的,UE中则使用UHT反射工具框架写出了属于自己的一套反射。
在UE中使用反射时,首先需要包含头文件"*.generated.h"。在这里,*表示通配符,代表某文件的名字。如我们创建了MyActor的类,那么在头文件中需要有 #include“MyActor.generated.h”.如下所示。
#include"CoreMinimal.h" #include"GameFramework/Actor.h" #include"MyActor.generated.h"
包含该头文件之后,UHT工具就回去扫描"*.generated.h"代表的头文件,然后在项目中生成generated.h和generated.cpp两个文件。对于类而言,类上添加UCLASS()和GENERATED_BODY()后,就会生成一套反射数据。在此基础上,对变量使用UPROPERTY()并结合属性修饰符和元数据修饰符限定变量,就可以得到特定的变量,如使得变量在在UE的编译器界面上可见。
主要有三个步骤
1.包含头文件
2.对类对象使用UCLASS()和GENERATED_BODY();
3.使用UPROPERTY()和UFUNCTION()修饰特定的变量和方法,只有被修饰的变量和方法才能有相应功能。
注意:UCLASS()和GENERATED_BODY()是修饰类的,其他的类型则是通过其他宏限定的。
UPROPERTY()是属性修饰宏,在括号中可以填写属性,每个属性的意义都不同,在官方文档 https://docs.unrealengine.com/4.26/zh-CN/ProgrammingAndScripting/GameplayArchitecture/Properties/ 中可以看到各个属性的含义。
UPROPERTY()常用的属性有
进行适当测试
首先定义一个c++ class,为MyActor,并且在代码中定义变量HelloUE4变量
运行代码,可以看到出现变量HelloUE4,且可编辑。
并且基于此类创建新的蓝图类,在子蓝图类中仍然可以看到HelloUE4变量,可编辑。
前面的属性用于限制变量的是否可编辑、是否可见等属性。
在UPROPERTY()中也可以放置元数据修饰符,用于修饰变量的取值等限定。
元数据修饰符为meta,其编写用法为
UPROPERTY(EditAnywhere, meta = (ClampMin = "10", ClampMax = "100")) int32 HelloUE4;
如果我们相对变量做出一定限制,如最大值、最小值等,则可以使用元数据说明符进行限制。
在创建变量时,变量中会有一些选项,同样可以在c++中使用元数据修饰符来达到。
如下所示。
UPROPERTY(EditAnywhere, meta = (InstanceEditable = true)) int32 HelloUE4;
有些变量,在c++中不希望别的类能够访问到,但是希望蓝图中可以访问到,则在元数据说明符中可以操作
在c++中,所有的变量都使用UPROPERTY()进行反射,那么所有的方法都使用UFUNCTION()进行反射.
在官方文档中,这么说到“可利用函数说明符UFUNCTION()将UFunctions对蓝图可视化脚本图表公开,以便开发者从蓝图资源调用或扩展UFunction,而无需更改C++代码。”
同时还有,UFUNCTION
宏(位于每个函数上方)让引擎可以发觉这些函数,以便将它们纳入序列化和其他引擎功能中。
也就是,UFUNCTION()的功能都是将在c++中定义的函数在蓝图中可见并使用。
举例,如果想让在c++中定义的方法在蓝图中可调用,则
在头文件中定义
UFUNCTION(BlueprintCallable) void TestFun();
在cpp文件中实现
void AMyActor::TestFun() { UE_LOG(LogTemp, Warning, TEXT("Hello UE4 C++")) }
posted on 2022-03-19 15:13 hxh_space 阅读(1066) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本