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   hxh_space  阅读(1066)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示