天天看點

UE4基本資料類型

01 數字類型

bool:代表布爾值 (永遠不要假設布爾值的大小) BOOL 将不會進行編譯
TCHAR:代表字元型(永遠不要假設TCHAR的大小)

uint8:代表無符号位元組(占1個位元組)
int8:代表有符号的位元組(占1個位元組)
uint16:代表無符号"短整型" (占2 個位元組)
int16:代表有符号"短整型" (占2 個位元組)
uint32:代表無符号整型(占4位元組)
int32:代表帶符号整型(占4位元組)
uint64:代表無符号"四字" (8個位元組)
int64:代表有符号"四字"(8個位元組)

float:代表單精度浮點型 (占4 個位元組)
double:代表雙精度浮點型 (占8 個位元組)
PTRINT代表可以存放一個指針的整型 (永遠不要假設PTRINT的大小)
           

02 字元串

UE4内建字元串有3種類型:FString、FName和FText。

最常見的是 FString 類型,FName 和 FText 屬于不可變字元串,一經建立其中的内容就無法改變。FString 屬于可變字元串,可以對其正常的字元串操作,如分片,大小寫轉換等操作,程式設計時使用較多的也是它。三者之間可以進行互相轉換。

FName

FName是無法被修改的字元串,不區分大小寫,主要用于辨別資源路徑,它的優點就是查找和通路速度快。因為借助哈希表,從字元串到FName的轉換,根據Key查詢FName會變得非常快。

建立

FText

FText表示一個“被顯示的字元串”,因為TExt提供了内置的本地化支援,通過一張查找表來支援運作時本地化。

主要用于文本本地化。

FString

FString是唯一提供修改操作的字元串類,如:大小寫轉換、截取字元串、逆向等。由于FString是可變的,是以對其進行查找、對比等時開銷比不可變字元串類更大。

建立

對比

重載的 == 運算符可用于兩個 FString 的對比,或把 FString 比作一個 TCHAR*s 陣列。此外還有 FString::Equals() 法, 用 FString 進行測試,用 ESearchCase 枚舉進行對比,确定是否作為參數忽略大小寫。如希望對比忽略大小寫,使用 ESearchCase::IgnoreCase; 如不忽略,則使用 ESearchCase::CaseSensitive

搜尋

在 FString 中搜尋時有兩種搜尋類型。第一種是 FString::Contains(),找到子字元串後傳回 true,否則傳回 false。 FString::Contains() 可搜尋 FString 或 TCHAR*s 子字元串。ESearchCase 枚舉可用于指定搜尋是否忽略大小寫。此外,

ESearchDir

枚舉可用于指定搜尋的方向。 預設設定為忽略大小寫,從開始執行搜尋。

第二種是

FString::Find()

,傳回找到的第一個子字元串執行個體的索引。

FString::Find()

可對

FString

TCHAR*

s 子字元串進行搜尋。 和

FString::Contains()

一樣,可對大小寫敏感度和搜尋方向進行指定,預設設定為忽略大小寫并從字元串開頭開始搜素。也可在索引中任選一個索引開始搜尋。 如

FString::Find()

未找到子字元串,它将傳回 -1。

建構

可通過兩種方法用子字元串或其他變量類型建構字元串。首先,串聯隻接受 FString 作為參數。在串聯其他類型的變量時需要将其轉換為 FString。 第二,

Printf

可接受數字輸入(如 int 和浮點),在輸入被添加到字元串時還可對其格式進行設定。

串聯:有兩個運算符用于串聯字元串

運算符 描述 用法

+=

将提供的字元串附加到 FString 對象。

StringResult += AddedString;

+

建立一個 FString 對象并附加提供的字元串。

Printf:用 FString::Printf 建構的 FString 可被存入 FStrings,并與 UE_LOG調試資訊 一同顯示到螢幕上。 格式參數擁有和 C++ printf 函數相同的說明符,如下例所示

FString AShooterHUD::GetTimeString(float TimeSeconds)
{
// only minutes and seconds are relevant
const int32 TotalSeconds = FMath::Max(0, FMath::TruncToInt(TimeSeconds)%3600);
const int32 NumMinutes = TotalSeconds / 60;
const int32 NumSeconds = TotalSeconds % 60;

const FString TimeDesc = FString::Printf(TEXT("%02d:%02d"), NumMinutes, NumSeconds);
return TimeDesc;
}
           

注意:使用 %s 參數包含 FStrings 時,必須使用

*

運算符傳回 %s 參數所需的 TCHAR。

操作字元串

調試資訊

FString 可被列印到 視口 和 輸出日志,以便進行調試。

視口:使用 UEngine::AddOnScreenDebugMessage() 将調試資訊列印到 視口。

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, TestHUDString);//參數按照順序
           
參數名 參數類型 描述
Key int 防止相同資訊多次添加的唯一鍵。使用 -1 作為鍵,使調試資訊短時出現。
TimeToDisplay float 資訊顯示時長,按秒計
DisplayColor FColor 文本顯示的顔色
DebugMessage FString 顯示的資訊(FString)

輸出日志:UE_LOG 使用 printf 标記進行參數化。

UE_LOG(LogClass, Log, TEXT("This is a testing statement.%s"), *TestHUDString);
           
  • LogClass 為日志類别。可使用現有的類别(在 OutputDevices.h 中用 DECLARE_LOG_CATEGORY_EXTERN 宏設定)或使用 DEFINE_LOG_CATEGORY_STATIC 自行定義。
  • Log 為使用的備援度。備援度在 ELogVerbosity 枚舉中被定義。有效值為 Fatal、Error、Warning、Display、Log、Verbose 或 VeryVerbose。
  • 下一個參數即為希望輸出的文本,包括對參數的标記。

注意:此範例使用一個 %s 參數,是以

*

運算符用于傳回 %s 參數所需的 TCHAR*。

使用 UE_LOG 列印的資訊位于 Output Log 中(虛幻編輯器中 Window > Output Log)。

TName、FText和FString的類型轉換

範例
FName FString

TestHUDString = TestHUDName.ToString();

FName FText

TestHUDText = FText::FromName(TestHUDName);

FName -> FText 在一些情況下有效,但需注意 — FNames 内容不會從 FText 的"自動本地化"中受益。
FString FName

TestHUDName = FName(*TestHUDString);

FString -> FName 不可靠。因為 FName 不區分大小寫,是以轉換存在損耗。
FString FText

TestHUDText = FText::FromString(TestHUDString);

FString -> FText 在一些情況下有效,但需注意 — FString 内容不會從 FText 的"自動本地化"中受益。
FText FString

TestHUDString = TestHUDText.ToString();

FText -> FString 不可靠。它在一些語言的轉換中存在潛在損耗。
FText FName FText 到 FName 的轉換不存在。但可先轉換到 FString,再轉換到 FName。FText -> FString -> FName 不可靠。因為 FName 不區分大小寫,是以轉換存在損耗。
FString int32

int32 TestInt = FCString::Atoi(*MyFString);

FString float

float TestFloat = FCString::Atof(*MyFString);

int32 FString

FString TestString = FString::FromInt(MyInt);

float FString

FString TestString = FString::SanitizeFloat(MyFloat);