FString
-
FString类似C++ STL中的string,提供字符串插入,拼接,删改,比较,迭代遍历等常见字符串功能。
-
默认是宽字符"TEXT()", 不允许使用多字符"char*"
TIPS:
设置字符串变量文字时应使用 TEXT() 宏。如未指定 TEXT() 宏,将使用 ANSI 对文字进行编码,会导致支持字符高度受限。传入 FString 的 ANSI 文字需要完成到 TCHAR 的转换(本地万国码编码),以便更高效地使用 TEXT()。
-
FString是唯一允许操作修改字符串的字符串类(比如在字符串结尾再加个字符)。而FName和FText不可操作修改
-
由于FString是可被修改的,当字符串进行搜索、对比等操作时,消耗比其他字符串类型更大
-
FString可以和数值类型相互转换,比如int,float,bool等。FVector,FRotator等也能转为FString。
//FString to std::string
std::string cstr(TCHAR_TO_UTF8(*UE4Str));
//std::string to FString
FString ue4Str = FString(cstr.c_str()));
-
FString转FName
TestHUDName = FName(*TestHUDString);
-
FString转FText
TestHUDText = FText::FromString(TestHUDString);
FName
-
FName最大特点是具备静态存储特性。相同的字符串只存一次。原理是唯一字符串和一个索引number组合起来存在表中,该特性使得FName查找和访问速度较快。例如比较2个FName是否相等,直接比较它们的索引是否相等,无需进行逐个字符的比较。
-
FName 不区分大小写,也不可变。
-
UE4编辑器中的各种操作命名也用的FName,比如给组件命名等。
-
FName转FString
TestHUDString = TestHUDName.ToString();
-
FName转FText
TestHUDText = FText::FromName(TestHUDName);
FText
FText的概念是玩家可见文本。
-
界面中的文本框:是用FText来存文本信息
-
文本格式化功能:FText::Format(LOCTEXT("ExampleFText"," 当前剩余生命值{0}."), CurrentHealth);
-
FText::AsDate:将FDateTime值转换为用户友好的日期表示形式。
-
FText::AsPercent: 可以将浮点数变成百分比形式,0.2 ->20%。
-
由于要支持未来的多语言版本,服务器不允许直接使用格式化的玩家可见文本FText。
所以FText除了含有原始的字符串外,还包含大量的表现信息。
-
FText转FName
不存在直接转的的方式,可以先转FString,再转FName
-
FText转FString
TestHUDString = TestHUDText.ToString();
如何选择
-
FText
用于字符串表现,显示给玩家看。例如,提示给玩家的信息:
FText::Format(LOCTEXT("ExampleFText"," 当前剩余生命值{0}."), CurrentHealth);
服务器不允许写这种逻辑。
-
FName
不区分大小写,也不操作修改字符串的,查找性能较好。例如,配置组件名字
UPROPERTY(EditDefaultsOnly)
FName TargetComponent;
-
FString
需要区分大小写的,或需要对字符串操作的使用。例如:拼接路径
FString strPath = FPaths::ProjectDir() + TEXT("aa.exe");
Tips:信息含量为FText > FString > FName
高信息转低信息类型时存在信息损耗。