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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?