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 對象。 | |
| 建立一個 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 | |
FName | FText | FName -> FText 在一些情況下有效,但需注意 — FNames 内容不會從 FText 的"自動本地化"中受益。 |
FString | FName | FString -> FName 不可靠。因為 FName 不區分大小寫,是以轉換存在損耗。 |
FString | FText | FString -> FText 在一些情況下有效,但需注意 — FString 内容不會從 FText 的"自動本地化"中受益。 |
FText | FString | FText -> FString 不可靠。它在一些語言的轉換中存在潛在損耗。 |
FText | FName | FText 到 FName 的轉換不存在。但可先轉換到 FString,再轉換到 FName。FText -> FString -> FName 不可靠。因為 FName 不區分大小寫,是以轉換存在損耗。 |
FString | int32 | |
FString | float | |
int32 | FString | |
float | FString | |