前言
最近在學(xué)習(xí) UE,發(fā)現(xiàn) UE 基本沒有用到 std::string,基本使用的是FString、FName、FText。去網(wǎng)絡(luò)上查了些資料并且學(xué)習(xí)了下,在這里做個(gè)簡(jiǎn)單介紹和總結(jié)。為什么需要三種字符串呢?主要是因?yàn)樗麄內(nèi)加凶约荷瞄L(zhǎng)的場(chǎng)景。
FString
FString 是 的縮寫Fixed String,是虛幻引擎中使用的動(dòng)態(tài)字符串類型。它類似于標(biāo)準(zhǔn) C++ 字符串 (std::string),是處理文本的最靈活的選項(xiàng)。以下是 FString 用法的一些主要功能和示例
- 動(dòng)態(tài)和可變:可以在創(chuàng)建 FString 后更改其內(nèi)容。
FString MyString = "Hello, ";
MyString += "Unreal Engine!";
- 文本操作和格式化的理想選擇:FString 非常適合在運(yùn)行時(shí)連接、操作和格式化文本。
FString PlayerName = "John";
FString Greeting = FString::Printf(TEXT("Hello, %s!"), *PlayerName);
- 性能考慮因素:由于 FString 的動(dòng)態(tài)特性,與 FName 和 Text 相比,F(xiàn)String 的性能開銷較小。避免在性能關(guān)鍵型代碼中過度使用。
FName
- FName 是 的縮寫Fixed Name,是虛幻引擎中更專業(yè)的數(shù)據(jù)類型。它主要用于存儲(chǔ)和引用名稱,例如對(duì)象名稱、屬性名稱和資產(chǎn)名稱。FName不區(qū)分大小寫,為便于快速定位某個(gè)資源。FName當(dāng)創(chuàng)建時(shí),會(huì)根據(jù)字符串內(nèi)容計(jì)算出一個(gè)Hash值,這樣實(shí)現(xiàn)比較邏輯的時(shí)候不用比較字符串內(nèi)容,而是直接比較hash值是否相等,就是O(1).
注意:FName 不區(qū)分大小寫
- 高效的內(nèi)存使用:FName使用全局名稱表,可以減少多次存儲(chǔ)相同名稱時(shí)的內(nèi)存開銷。
在此示例中,F(xiàn)irstname 和 SecondName 都引用全局名稱表中的相同條目,從而節(jié)省內(nèi)存。
FName Firstname = FName(TEXT("John"));
FName SecondName = FName(TEXT("John"));
- 不適合動(dòng)態(tài)文本:FName 是不可變的,不適合動(dòng)態(tài)文本操作。為此,請(qǐng)使用 FString 或 Text。
FText
- 文本是虛幻引擎中另一種與文本相關(guān)的數(shù)據(jù)類型,對(duì)于本地化和以人類可讀的格式維護(hù)文本特別有用。以下是文本的一些關(guān)鍵特征和用例:
本地化支持:文本支持本地化,可以更輕松地管理游戲中的多種語(yǔ)言和翻譯。
FText MyLocalizedText = NSLOCTEXT("MyNamespace", "MyKey", "Hello World!");
- 不可變且安全:與 FName 一樣,Text 是不可變的,這確保文本在運(yùn)行時(shí)保持一致且不變。
- 適用于面向用戶的文本:使用文本來顯示用戶界面、對(duì)話或玩家可見的任何文本。
UTextBlock* TextElement = ...;
TextElement->SetText(MyLocalizedText);
- 內(nèi)存開銷稍多:由于其本地化支持,Text 的內(nèi)存開銷比 FName 稍高,但它仍然比 FString 更節(jié)省內(nèi)存。
FString、FName 和 Text 之間的區(qū)別
可變性
- FString:可變且動(dòng)態(tài)。創(chuàng)建后您可以更改其內(nèi)容。
- FName:不可變。一旦創(chuàng)建,就無法修改。
- FText:不可變。文本對(duì)象在創(chuàng)建后也無法更改。
內(nèi)存開銷
- FString:由于其動(dòng)態(tài)特性,內(nèi)存開銷略高。
- FName:內(nèi)存開銷低,因?yàn)樗褂萌置Q表來減少冗余。
- FText:與 FName 相比,內(nèi)存開銷略高,主要是由于本地化支持。
用例
- FString:非常適合動(dòng)態(tài)文本操作、格式化以及文本內(nèi)容在運(yùn)行時(shí)可能發(fā)生變化的任何情況。
- FName:最適合存儲(chǔ)和引用名稱,特別是對(duì)象、屬性和資產(chǎn)的名稱。不適合動(dòng)態(tài)文本。
- FText:專為面向用戶的文本、本地化和維護(hù)人類可讀的文本而設(shè)計(jì)。非常適合在需要本地化的用戶界面、對(duì)話和游戲內(nèi)容中顯示的文本。
表現(xiàn)
- FString:具有與動(dòng)態(tài)內(nèi)存分配和釋放相關(guān)的性能成本。在性能關(guān)鍵的代碼中明智地使用它。
- FName:由于其低內(nèi)存開銷和高效的名稱查找,提供出色的性能。
- FText:在用戶界面元素和本地化方面表現(xiàn)良好。雖然與 FName 相比它有一些額外的開銷,但對(duì)于大多數(shù)情況來說它仍然是一個(gè)有效的選擇。
本地化支持
- FString:沒有內(nèi)置的本地化支持。應(yīng)手動(dòng)管理文本以進(jìn)行本地化。
- FName:沒有內(nèi)置的本地化支持;通常用于內(nèi)部參考而不是面向用戶的文本。
- FText:設(shè)計(jì)時(shí)考慮到本地化,使其成為管理跨不同語(yǔ)言的文本的有力選擇。
結(jié)論
了解虛幻引擎中 FString、FName 和 Text 之間的差異對(duì)于高效的游戲開發(fā)至關(guān)重要。每種數(shù)據(jù)類型都有其獨(dú)特的優(yōu)點(diǎn)和缺點(diǎn),使其適合特定的用例??偨Y(jié)一下:
使用 FString 進(jìn)行動(dòng)態(tài)文本操作和格式化。使用 FName 有效存儲(chǔ)名稱以及對(duì)資產(chǎn)或?qū)ο蟮囊?。使用文本以?biāo)準(zhǔn)化方式進(jìn)行面向用戶的文本、本地化和維護(hù)人類可讀的文本。通過為作業(yè)選擇正確的數(shù)據(jù)類型,您可以優(yōu)化內(nèi)存使用并提高虛幻引擎項(xiàng)目的整體性能和可維護(hù)性。文章來源:http://www.zghlxwxcb.cn/news/detail-810149.html
參考鏈接
虛幻中的 FSTRING、FNAME 與 TEXT文章來源地址http://www.zghlxwxcb.cn/news/detail-810149.html
到了這里,關(guān)于UE學(xué)習(xí)筆記--如何區(qū)分FString、FName、FText,以及使用場(chǎng)景的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!