属性声明

  • 属性使用标准的C++变量语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符。
  1. UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
  2. Type VariableName;
  • 示例:位掩码

  1. UENUM(BlueprintType)
  2. enum class EColorBits1 :uint8
  3. {
  4. ECB_Red,
  5. ECB_Green,
  6. ECB_Blue,
  7. };
  8. //使用"bitflags"元标记来创建UENUM,实际使用似乎没差别
  9. UENUM(BlueprintType, Meta = (Bitflags))
  10. enum class EColorBits2 :uint8
  11. {
  12. ECB_Red,
  13. ECB_Green,
  14. ECB_Blue,
  15. };
  1. UPROPERTY(EditAnywhere, Meta = (Bitmask))
  2. int32 BasicBits;
  3. UPROPERTY(BlueprintReadWrite, EditAnywhere)
  4. EColorBits1 ColorBits1;
  5. UPROPERTY(BlueprintReadWrite, EditAnywhere)
  6. EColorBits2 ColorBits2;
  7. UPROPERTY(BlueprintReadWrite, EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits1"))
  8. int32 ColorFlags3;
  9. UPROPERTY(BlueprintReadWrite, EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits2"))
  10. int32 ColorFlags4;

在上述示例中, ECB_Red 值为0,表示它被选中时将激活位0(将ColorFlags增加1)。ECB_Green对应于位1(将ColorFlags增加2),ECB_Blue 对应于位2(将ColorFlags增加4)。

属性说明符

作用

  • 声明属性时,属性说明符 可被添加到声明,以控制属性与引擎和编辑器诸多方面的相处方式。

常用说明符

VisibleDefaultsOnly

  1. // 仅在 Class Defaults 可见
  2. UPROPERTY(VisibleDefaultsOnly)
  3. int32 VisibleDefaultsOnlyInt;

VisibleInstanceOnly

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

VisibleAnywhere

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

EditDefaultsOnly

  1. //仅在 Class Defaults 可编辑
  2. UPROPERTY(EditDefaultsOnly)
  3. int32 EditDefaultsOnlyInt;

EditInstanceOnly

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

EditAnywhere

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

BlueprintReadOnly

  1. //Variables 只读
  2. UPROPERTY(BlueprintReadOnly)
  3. int32 intValue_BlueprintReadOnly;

BlueprintReadWrite

  1. //Variables 可读写
  2. UPROPERTY(BlueprintReadWrite)
  3. int32 intValue_BlueprintReadWrite;

Category 类别

  1. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TopCategory")
  2. int32 intValue1;
  3. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "TopCategory|SubCategory")
  4. int32 intValue2;

BlueprintAssignable

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

元数据说明符 meta

作用

声明类、接口、结构体、列举、列举值、函数,或属性时,可添加 元数据说明符 来控制其与引擎和编辑器各方面的相处方式。每一种类型的数据结构或成员都有自己的元数据说明符列表

常见说明符

DisplayName 别名

  • 可以便于蓝图变量搜索,如果变量名不好记的话

EditCondition 条件可编辑

  • 支持bool、比较等条件判断
  1. UPROPERTY(EditAnywhere,BlueprintReadWrite, meta = (DisplayName="UseOffset1、2 标志位") )
  2. bool bUseOffset;
  3. UPROPERTY(EditAnywhere, meta = (DisplayName = "ContitionValue 控制 offset3"))
  4. int32 ContitionValue;
  5. UPROPERTY(EditAnywhere, meta = (DisplayName = "ContitionColorBits 控制 offset4"))
  6. EColorBits1 ContitionColorBits;
  7. UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "bUseOffset"))
  8. float Offset1;
  9. UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "!bUseOffset"))
  10. float Offset2;
  11. UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "ContitionValue>0"))
  12. float Offset3;
  13. UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "ContitionColorBits==EColorBits1::ECB_Green"))
  14. float Offset4;

UMETA 扩展宏

  • cpp meta里的中文在蓝图经常会乱码

    • 解决方法一:高级保存选择 Unicode 65001
    • 解决办法二:使用UMETA中的DisplayName
  • 可用于Enum的元素别名
  • 可用于结构体的元素别名
  • 可用于Datatable的别名
  1. UPROPERTY(EditAnywhere)
  2. FName ChineseName UMETA(DisplayName="中文名");
  3. UPROPERTY(EditAnywhere)
  4. float Weight UMETA(DisplayName = "体重") = 65.0f;
  5. UPROPERTY(EditAnywhere)
  6. EColorBits1 FavoriteColorBits UMETA(DisplayName = "最喜欢的颜色")=EColorBits1::ECB_Blue;

参考

UPROPERTY

【UE4 C++ 基础知识】<1> UPROPERTY宏、属性说明符、元数据说明符的更多相关文章

  1. 【UE4 C++ 基础知识】<11>资源的同步加载与异步加载

    同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder Constructor ...

  2. 【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符

    UFunction声明 UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数.UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文 ...

  3. 基础知识系列☞C#中→属性和字段的区别

    "好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...

  4. 【UE4 C++ 基础知识】<3> 基本数据类型、字符串处理及转换

    基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR ...

  5. 【UE4 C++ 基础知识】<10>资源的引用

    2种引用方式 硬引用(Hard Reference) 即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载 硬引用过多会导致运行时很多暂时用不到的资源也被加载到内存中 大量资源会导致进程阻 ...

  6. 【UE4 C++ 基础知识】<12> 多线程——FRunnable

    概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的 ...

  7. 【UE4 C++ 基础知识】<8> Delegate 委托

    概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到 ...

  8. 【UE4 C++ 基础知识】<4> 枚举 Enum、结构体 Struct

    枚举 UENUM宏搭配BlueprintType可以将枚举暴露给蓝图,不使用的话,仅能在C++使用 //定义一个原生enum class enum class EMyType { Type1, Typ ...

  9. WPF 数据绑定 1_1 基础知识&绑定到元素属性

    A.数据绑定基础: 数据源对象:WPF将从该对象中提取信息,交由目标对象进行显示. 目标对象:从数据源中提取信息,并赋给该对象的属性. B.绑定到元素属性 最简单的绑定情形则是将一个源对象指定为一个W ...

随机推荐

  1. redis未授权getshell的4种方式

    前言 redis未授权漏洞或弱口令一直是很有用的渗透突破口,最近正好闲的无事就拿redis来测试一些,做一个简单的收集,方便自己日后的回顾. 漏洞描述 Redis 默认情况下,会绑定在 0.0.0.0 ...

  2. ABP 极简入门教程(一)

    本示例不讲概念,只讲怎么用,概念性的内容没有比官方文档更清楚的了,我也正在学习,可能理解的地方有不对的欢迎一起交流,但需要您了解以下内容才能看明白 asp.net core Entity Framew ...

  3. weblogic漏洞初探之CVE-2015-4852

    weblogic漏洞初探之CVE-2015-4852 一.环境搭建 1. 搭建docker 这里用了vulhub的环境进行修改:https://vulhub.org/ 新建个文件夹,创建两个文件doc ...

  4. Request 根据用户输入的信息获取输入到控制台

    html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  5. android开发使用jxl创建Excel

    这周水了几天,今天把博客赶上,找找状态. 周五的时候终于完成了课堂测试第二阶段,主要的难点就是生成Excel表并将填写的数据插入到Excel表中. 一.jxl使用 1.创建或读取一个工作薄 Workb ...

  6. leetcode 盛水最多的容器 解析

    采用双指针法: 主要思想:定义头尾两个指针,分别向中间遍历,当相遇时结束循环.存储每一次遍历容器盛水的最大容量,并不断更新. 盛水的最大容量为 左右指针高度的最小值 乘以 左右指针的距离即宽度. 则可 ...

  7. TypeScript与面向对象

    目录 1.引 2.类(class) 3.构造函数和this 4.继承 5.super 6.抽象类 7.接口 8.属性的封装 9.泛型 1.引 简而言之就是程序之中所有的操作都需要通过对象来完成.一切操 ...

  8. Git 访问慢 解决办法

    1. 查询Git最快的IP 通过 https://www.ipaddress.com/ 这个网站来获取当前github最新的ip分别获取以下两个域名的IP地址: 可以在访问git网站使用F12查询哪个 ...

  9. 数组转为unicode字符编码字符串

    json_encode($data, JSON_UNESCAPED_UNICODE)在创建微信卡券,发送数据时需要这个

  10. javascript 自定义事件 发布-订阅 模式 Event

    * javascript自定义事件 var myEvent = document.createEvent("Event"); myEvent.initEvent("myE ...