美文网首页虚幻4
【虚幻引擎】UE4虚拟架构之属性数据类型

【虚幻引擎】UE4虚拟架构之属性数据类型

作者: peony007 | 来源:发表于2017-02-27 16:35 被阅读875次

本文是参考以下文档结合个人实践整理而成:


属性声明(Property Declaration)

属性变量使用标准C ++变量语法声明,通过使用UPROPERTY宏来进行属性声明标记。

UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;

核心数据类型(Core Data Types)

整型

因为不同平台基础类型的尺寸不同,如 short、int 和 long,UE4 提供了以下类型(即“int”或“uint”,后跟大小[以位为单位]),可用作替代品:

类型 描述
uint8 8位无符号
uint16 16位无符号
uint32 32位无符号
uint64 64位无符号
int8 8位有符号
int16 16位有符号
int32 32位有符号
int64 64位有符号
  • 虚幻引擎拥有一个模板TNumericLimits,用于找到数值类型支持的最小和最大范围。
  • 请不要在可移植代码中使用 C++ 整型,因为需要根据编译器决定这种数据类型的大小。
  • 数值类型在NumericLimits.h中声明,可以详细阅读查询。

Bitmasks

整数类型的属性可以作为位掩码暴露给编辑器。
要将整数属性标记为位掩码,只需向元素段添加“bitmask”,如下所示:

UPROPERTY(EditAnywhere, Meta = (Bitmask))
int32 BasicBits;

添加此元标记后,编辑器中呈现的为通用命名标志(“Flag1”,“Flag2”...“Flag32”)的下拉列表。



为了定制bitflags的名称,我们必须首先使用“bitflags”元标记创建一个UENUM:

UENUM(BlueprintType, Meta = (Bitflags))
enum class EColorBits
{
    ECB_Red,
    ECB_Green,
    ECB_Blue
};

在创建这个UENUM之后,我们可以使用“BitmaskEnum”元标签来引用它,如下所示:

UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits"))
int32 ColorFlags;

这样调整后,下拉框中列出的位标志将采用枚举类条目的名称和值。
在这个例子中,ECB_Red是值0,意味着当选中时它将激活位0(向ColorFlags添加1);ECB_Green对应于位1(将2加到ColorFlags);ECB_Blue对应于位2(将4加到ColorFlags)。


  • 虽然枚举类型可以包含多于32个条目,但只有前32个值将在属性编辑器UI中的位掩码关联中可见。
  • 类似地,当接受显式值条目时,具有不在0和31之间的显式值的条目将不包括在下拉中。

浮点类型

虚幻使用标准的C ++浮点类型,float(32-bit)和double(64-bit)。

float num_f = 1.0f;
double num_d = 1.0;

Boolean型

布尔类型可以使用C ++ bool关键字或作为位域表示。

uint32 bIsHungry : 1;
bool bIsThirsty;
  • 位域表示应该是UE4里特有的,因为没有UPROPERTY标记的话编译会报错。

字符串

FString

FString 是一个可变字符串,类似于 std::string,它拥有许多方法,便于简单地使用字符串。
使用 TEXT() 宏可新建一个 FString:

FString MyStr = TEXT("Hello, Unreal 4!").

FText

FText 与 FString 相似,但用于本地化文本。
使用 NSLOCTEXT 宏可新建一个 FText,此宏拥有默认语言的命名空间、键和一个数值。

FText MyText = NSLOCTEXT("Game UI", "Health Warning Message", "Low Health!")

也可使用 LOCTEXT 宏,只需要在每个文件上定义一次命名空间,确保在文件底层取消它的定义。

// 在 GameUI.cpp 中
#define LOCTEXT_NAMESPACE "Game UI"

//...
FText MyText = LOCTEXT("Health Warning Message", "Low Health!")
//...

#undef LOCTEXT_NAMESPACE
// 文件末端

FName

FName 将经常反复出现的字符串保存为辨识符,以便在对比时节约内存和 CPU 时间。
FName 不会在引用完整字符串的每个对象间对其进行多次保存,而是使用一个映射到给定字符串的较小存储空间 索引;这会单次保存字符串内容,在字符串用于多个对象之间时节约内存。
检查 NameA.Index 是否等于 NameB.Index 可对两个字符串进行快速对比,避免对字符串中每个字符进行相等性检查。

编码实践

[CoreDataTest.h]
void TestData();

#pragma region  Test bitmask
    UPROPERTY(EditAnywhere, Meta = (Bitmask))
        int32 BasicBits;
    UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits"))
        int32 ColorFlags;
#pragma endregion

#pragma region Boolean
    // 应该是UE4里特有的,没有UPROPERTY标记的话编译会报错
    UPROPERTY()
        uint32 bSimGravityDisabled : 1;
#pragma endregion   

[CoreDataTest.cpp]
// 写了个方法来专门测试数据类型
// 这些数据类型应该是通用的,不特针对UPROPERTY
void ACoreDataTest::TestData()
{
    // Integers
    uint8 num_u8 = 8;
    uint16 num_u16 = -16;
    uint32 num_u32 = 32;
    uint64 num_u64 = 64;

    int8 num_i8 = 8;
    int16 num_i16 = 16;
    int32 num_i32 = 32;
    int64 num_i64 = 64;

    // Float
    float num_f = 1.0f;
    double num_d = 1.0;

    // Boolean
    bool bIsThirsty = false;

    //String
    FString fstr = TEXT("Hello, UrealEngine 4!");
    FText ftext_ns = NSLOCTEXT("Game UI", "Health Waring Message", "Low Health!");

#define LOCTEXT_NAMESPACE "Game UI"
    FText ftext = LOCTEXT("Health Warning Message", "Low Health");
#undef LOCTEXT_NAMESPACE

    // FName 
    // 不知道怎么用的,以后学会了再补充
}

相关文章

  • 【虚幻引擎】UE4虚拟架构之属性数据类型

    本文是参考以下文档结合个人实践整理而成: 虚幻架构 - 属性- 核心数据类型*这小节有关数据类型的部分没有中文翻译...

  • 【虚幻引擎】UE4虚幻架构之属性修饰符

    UnrealEngine Doc官方文档比较零碎,而且有些只看文字描述还不易理解,索性自己多动手多实践,加深理解。...

  • UE4 C++模块化编程

    参考文献: 游戏模块 | 虚幻引擎文档 编译工具 | 虚幻引擎文档 《大象无形:虚幻引擎程序设计浅析》 ue4 模...

  • UE4之UFUNCTION介绍

    UFUNCTION UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数。 UObject 或蓝图...

  • 数字孪生

    虚幻引擎UE4加载GIS数据《数字孪生&智慧城市》[https://blog.csdn.net/qq_455905...

  • 【一】一脸懵逼的小白

    1,如何下载UE4方法一,打开浏览器,在百度中输入虚幻4或者UE4;方法二, 在浏览器的网址上输入虚幻引擎的官网地...

  • Unreal4地形材质0062bate1

    地形材质设置 材质以用于地形地貌。尽管任意 材质 都可用于 地形 Actor,但虚幻引擎4(UE4)中的材质系统同...

  • UE4视频学习资料

    【虚幻4 | UE4】初学者系列教程(合集)-全中文入门新手教程(上) 【虚幻4 | UE4】初学者系列教程#1-...

  • 【虚幻引擎】UE4 - VR入门经验

    之前看了一个月左右的资料,包括官方文档及简单的C++教程,辅助做一些Demo练习,感觉再这么看下去也效果不佳,索性...

  • Unreal4地形碰撞指南0061bate1

    地形碰撞 虚幻引擎4(UE4)地形系统可指定几何体(这些几何体用于整个地形或单独组件的简单和复杂碰撞)的细节程度。...

网友评论

    本文标题:【虚幻引擎】UE4虚拟架构之属性数据类型

    本文链接:https://www.haomeiwen.com/subject/xwziwttx.html