Unreal TEXT FText,FName,FString 淺談


在下接觸UE不久,一開始遇到這個FString str = TEXT("Hello");表示有點懵逼,為啥每次聲明一個所謂的字符串類型都需要,而且,UE中幾乎很少使用std::string = "hello",這是為何吶。

有FString,FName,FText,這里,就講一下,為何會有這些。

 

1.來歷

UE4有三個常用的字符串類,FName,FText,FString,為啥吶,一句話,因為游戲對於性能的要求是很高的,普通的string滿足不了UE游戲開發性能需求,所以,FString,FName,FText出現,為了解決不同的游戲開發需求,適應不同情況下字符串的要求。

2.區別

FName,給某個東西命名的,FName不區分大小寫,為便於快速定位某個資源,std:string里會直接比較字符串內容,時間復雜度最壞情況為O(m*n),FName當創建時,會根據字符串內容計算出一個Hash值,這樣實現比較邏輯的時候不用比較字符串內容,而是直接比較hash值是否相等,就是O(1). 注意:FName 不區分大小寫

FText,相對FName,FText有點重, 看到的文本,都是FText,可以用於多語言功能。

FString最接近std:string,不同於前面兩種,他創建后是可修改的。提供了大量操作字符串的方法。性能差。FString 本質上是一個地址類型。

3.轉換規則

  TestString = TestName.ToString();

  TestString = TestText.ToString();

  

  TestName = FName(*TestString);

  TestName = TestText !!! 從FText到FName轉換不存在,但是可以通過先轉到FString,再轉到FName,但是不可靠,因為FName不區分大小寫。

  

  TestText = FText::FromName(TestName)

  TestText = FText::FromString(TestString)

 

  綜上

   

 

 

4.Text宏

  為何FString str = TEXT("Hello");

  如果未使用TEXT()宏,將使用ANSI對文字進行編碼,會導致支持字符高度受限(簡單來說,會亂碼)。傳入FString的ANSI文字需要完成到TChar的轉換

 

5.參考

https://blog.csdn.net/weixin_43405546/article/details/95978408

https://answers.unrealengine.com/questions/90638/text-string-or-name.html

https://docs.unrealengine.com/zh-CN/Programming/UnrealArchitecture/StringHandling/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM