0%

UE(2):基础变量类型

基础变量类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 布尔类型变量
bool varBool;
// 32位整型变量
int32 varInt32;
// 64位整型变量
int64 varInt64;
// 字节类型变量
BYTE varByte;
// 字符串类型变量FString
FString varString;
// 名称类型变量FName
FName varName;
// 文本类型变量FText
FText varText;
// 向量类型变量FVector
FVector varVector; //xyz的坐标
// 旋转向量类型变量FRotator
FRotator varRotator; // x轴旋转Roll,y轴旋转Pitch,z轴旋转Var
// FTransform
FTransform varTransform; // FVector,FRotator,缩放Scale三者的集合类型

FString、FName、FText三者的区别和相互转化

区别:

FString:接近C++中的 std::string,更着重于字符串的操作,提供字符串的操作接口,与其他两个相比唯一一个可以修改的变量,所以消耗更多,性能更低

FName:着重于表示名称,不区分大小写,不可以更改,引擎中的字面名称都是FName类型,FName在创建的时候会根据内容创建一个哈希值,同样的内容只会存储一次,通过哈希值FName的查找和访问比较快,通过比较哈希值来区分不同的FName

FText:着重在于显示与本地化,显示玩家能直接看到的信息,本地化即多语言的处理,不可更改。相较于另外两种类型,FText会更加的臃肿,但提供了优秀的本地化功能

本地化:一个字符串,在不同的地区显示为不同的字符。如 ”菜单“ 在英语地区显示为 “Menu“ ,这种支持不同语言地区显示不同字符的工作,就叫做本地化

转化

  1. FString—>FName/FText

    1
    2
    3
    4
    5
    6
    // 创建一个FString
    FString MyString = TEXT("I am string");
    // FString转化为FName
    FName MyName = FName(*MyString);
    // FString转化为FText
    FText MyText = FText::FromString(MyString);
  2. FName—>FString/FText

    1
    2
    3
    4
    // FName转化为FString
    MyString = MyName.ToString();
    // FName转化为FText
    FText MyText = FText::FromName(MyName);
  3. FText—>FString/FName

    1
    2
    // FText转化为FString
    FString strFromText = MyText.ToString();

    注意:FText不能直接转换成FName,需要FText->FString->FName

基础数据类型输出打印

1
2
3
4
5
6
7
8
9
10
11
12
13
// 基础数据类型打印
int32 MyInt = 10;
float MyFloat = 5.0;
bool MyBool = true;
char MyChar = 'A';
FString MyFString = TEXT("MyString");
FVector MyVector = FVector(0, 0, 0);
UE_LOG(LogTemp, Warning, TEXT("%d"), MyInt);
UE_LOG(LogTemp, Warning, TEXT("%f"), MyFloat);
UE_LOG(LogTemp, Warning, TEXT("%d"), MyBool);
UE_LOG(LogTemp, Warning, TEXT("%c"), MyChar);
UE_LOG(LogTemp, Warning, TEXT("%s"), *MyFString);
UE_LOG(LogTemp, Warning, TEXT("%s"), *MyVector.ToString());

image-20240819192108004