【UE4 C++ 基础知识】<1> UPROPERTY宏、属性说明符、元数据说明符
属性声明
- 属性使用标准的C++变量语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符。
UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;
示例:位掩码
UENUM(BlueprintType)
enum class EColorBits1 :uint8
{
ECB_Red,
ECB_Green,
ECB_Blue,
};
//使用"bitflags"元标记来创建UENUM,实际使用似乎没差别
UENUM(BlueprintType, Meta = (Bitflags))
enum class EColorBits2 :uint8
{
ECB_Red,
ECB_Green,
ECB_Blue,
};
UPROPERTY(EditAnywhere, Meta = (Bitmask))
int32 BasicBits;
UPROPERTY(BlueprintReadWrite, EditAnywhere)
EColorBits1 ColorBits1;
UPROPERTY(BlueprintReadWrite, EditAnywhere)
EColorBits2 ColorBits2;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits1"))
int32 ColorFlags3;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits2"))
int32 ColorFlags4;

在上述示例中, ECB_Red 值为0,表示它被选中时将激活位0(将ColorFlags增加1)。ECB_Green对应于位1(将ColorFlags增加2),ECB_Blue 对应于位2(将ColorFlags增加4)。
属性说明符
作用
- 声明属性时,属性说明符 可被添加到声明,以控制属性与引擎和编辑器诸多方面的相处方式。
常用说明符
VisibleDefaultsOnly
// 仅在 Class Defaults 可见
UPROPERTY(VisibleDefaultsOnly)
int32 VisibleDefaultsOnlyInt;

VisibleInstanceOnly
// 仅在实例化 Detail 可见
UPROPERTY(VisibleInstanceOnly)
FVector VisibleInstanceOnlyVector;

VisibleAnywhere
//Class Defaults 和 实例化 Detail 可见
UPROPERTY(VisibleAnywhere)
FString VisibleAnywhereString;

EditDefaultsOnly
//仅在 Class Defaults 可编辑
UPROPERTY(EditDefaultsOnly)
int32 EditDefaultsOnlyInt;

EditInstanceOnly
//仅在实例化 Detail 可编辑
UPROPERTY(EditInstanceOnly)
FVector EditInstanceOnlyVector;

EditAnywhere
//Class Defaults 和 实例化 Detail 可编辑
UPROPERTY(EditAnywhere)
FString EditAnywhereString;

BlueprintReadOnly
//Variables 只读
UPROPERTY(BlueprintReadOnly)
int32 intValue_BlueprintReadOnly;

BlueprintReadWrite
//Variables 可读写
UPROPERTY(BlueprintReadWrite)
int32 intValue_BlueprintReadWrite;

Category 类别
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TopCategory")
int32 intValue1;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "TopCategory|SubCategory")
int32 intValue2;

BlueprintAssignable
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FNotifyPawnChange, float, PawnHpPercent, float, PawnPhysicalShieldPercent, float, PawnMageShieldPercent);
//蓝图中可绑定委托
UPROPERTY(BlueprintAssignable)
FNotifyPawnChange NotifyPawnChange;

元数据说明符 meta
作用
声明类、接口、结构体、列举、列举值、函数,或属性时,可添加 元数据说明符 来控制其与引擎和编辑器各方面的相处方式。每一种类型的数据结构或成员都有自己的元数据说明符列表
常见说明符
DisplayName 别名
- 可以便于蓝图变量搜索,如果变量名不好记的话
EditCondition 条件可编辑
- 支持bool、比较等条件判断
UPROPERTY(EditAnywhere,BlueprintReadWrite, meta = (DisplayName="UseOffset1、2 标志位") )
bool bUseOffset;
UPROPERTY(EditAnywhere, meta = (DisplayName = "ContitionValue 控制 offset3"))
int32 ContitionValue;
UPROPERTY(EditAnywhere, meta = (DisplayName = "ContitionColorBits 控制 offset4"))
EColorBits1 ContitionColorBits;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "bUseOffset"))
float Offset1;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "!bUseOffset"))
float Offset2;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "ContitionValue>0"))
float Offset3;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "ContitionColorBits==EColorBits1::ECB_Green"))
float Offset4;

UMETA 扩展宏
- cpp meta里的中文在蓝图经常会乱码
- 解决方法一:高级保存选择 Unicode 65001
- 解决办法二:使用UMETA中的DisplayName
- 可用于Enum的元素别名
- 可用于结构体的元素别名
- 可用于Datatable的别名
UPROPERTY(EditAnywhere)
FName ChineseName UMETA(DisplayName="中文名");
UPROPERTY(EditAnywhere)
float Weight UMETA(DisplayName = "体重") = 65.0f;
UPROPERTY(EditAnywhere)
EColorBits1 FavoriteColorBits UMETA(DisplayName = "最喜欢的颜色")=EColorBits1::ECB_Blue;

参考
【UE4 C++ 基础知识】<1> UPROPERTY宏、属性说明符、元数据说明符的更多相关文章
- 【UE4 C++ 基础知识】<11>资源的同步加载与异步加载
同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder Constructor ...
- 【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符
UFunction声明 UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数.UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文 ...
- 基础知识系列☞C#中→属性和字段的区别
"好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...
- 【UE4 C++ 基础知识】<3> 基本数据类型、字符串处理及转换
基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR ...
- 【UE4 C++ 基础知识】<10>资源的引用
2种引用方式 硬引用(Hard Reference) 即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载 硬引用过多会导致运行时很多暂时用不到的资源也被加载到内存中 大量资源会导致进程阻 ...
- 【UE4 C++ 基础知识】<12> 多线程——FRunnable
概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的 ...
- 【UE4 C++ 基础知识】<8> Delegate 委托
概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到 ...
- 【UE4 C++ 基础知识】<4> 枚举 Enum、结构体 Struct
枚举 UENUM宏搭配BlueprintType可以将枚举暴露给蓝图,不使用的话,仅能在C++使用 //定义一个原生enum class enum class EMyType { Type1, Typ ...
- WPF 数据绑定 1_1 基础知识&绑定到元素属性
A.数据绑定基础: 数据源对象:WPF将从该对象中提取信息,交由目标对象进行显示. 目标对象:从数据源中提取信息,并赋给该对象的属性. B.绑定到元素属性 最简单的绑定情形则是将一个源对象指定为一个W ...
随机推荐
- (九)羽夏看C语言——C++番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- Redis中关于key的操作指令
1.keys: 例如: 2.exists 3.move 将指定的数据移动到指定的库 4.expire 5.tt1 6.type 7.rename 8.del
- Linux下SSH以及SSH秘钥
一.基于秘钥方式实现远程连接 第一步:创建密钥对(在管理端服务器上操作) 中间的输入项可以直接回车 ssh-keygen -t dsa 第二步:分发公钥(在管理端服务器执行) 这个步骤需要输入一个ye ...
- Redis哨兵机制的实现及与SpringBoot的整合
1. 概述 前面我们聊过Redis的读写分离机制,这个机制有个致命的弱点,就是主节点(Master)是个单点,如果主节点宕掉,整个Redis的写操作就无法进行服务了. 为了解决这个问题,就需要依靠&q ...
- unity2021游戏引擎安装激活并汉化
今天重新搭建了下unity的开发环境,也踩了不少坑,还有就是看了一些unity3d的教程,越看越不可思议,unity居然能做这么多好玩的东西,像枪战类,模拟类,角色扮演,动作冒险都很震撼. 但是震撼归 ...
- 痞子衡嵌入式:原来i.MXRT1xxx系列里也暗藏了Product ID寄存器
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列里暗藏的Product ID寄存器. MCU 厂商在定义一个产品系列时,通常是会预先规划产品发展路线的(即会有一 ...
- ASP.NET Core Web API 教程 - Project Configuration
ASP.NET Core Web API 教程 本系列文章主要参考了<Ultimate ASP.NET Core 3 Web API>一书,我对原文进行了翻译,同时适当删减.修改了一部分内 ...
- 计算字符串的长度.len,RuneCountInString
内置函数len(),可以返回字符串/数组/切片/map/channel的长度. unicode/utf8包 函数:RuneCountInString(输入一个字符串),返回int类型的字符串长度.由于 ...
- Docker部署启动错误,需要手动进入Docker的容器里,启动程序,排查错误
#docker-compose build --no-cache //重新创建容器,不管有没有 #docker-compose up #docker-compose up -d //后台启动并运行容器 ...
- Jmeter系列(24)- 常用逻辑控制器(3) | 模块控制器Module Controller
模块控制器(Module Controller) 作用 可以理解为引用.调用执行的意思,调用范围为testplan树下任意的逻辑控制器,模块控制器除外 点开testplan树,需要引用哪个逻辑控制器选 ...