• 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

  • 相关阅读:
    2019年3月博客汇总
    赞美郭老师
    多项式初步
    Linux 下安装配置 JDK
    Python搜索目录下指定的文件,并返回绝对路径(包括子目录)
    Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系
    Python地址簿
    PHP正确的使用复数
    seq
    date
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/12307381.html
Copyright © 2020-2023  润新知