【UE5 C++课程系列笔记】11——FString、FName、FText的基本使用

devtools/2024/12/25 12:12:11/

目录

概念

常用操作示例

一、FString

1.1 创建字符串

1.2 字符串拼接 

1.3 字符串长度

1.4 字符串查找

1.5 字符串替换

1.6 比较字符串

二、FName

2.1 创建FName

2.2 比较FName

2.3 在容器中使用 FName

三、FText

3.1 创建FText

3.2 格式化FText

3.3 显示文本控件内容

 FString、FName、FText类型的转换

一、 FString、FName、FText互转

二、其它类型转FString

三、FString转其它类型


概念

  FString 是UE中用于处理字符串的类型。它提供了丰富的字符串操作功能,类似于标准 C++ 中的 std::string,但在 UE 环境下更加方便和安全地处理游戏开发中的各种文本信息,如玩家名称、物品描述、对话框内容等。

  FName 是UE中用于存储和处理名称的轻量级类型。它主要用于需要高效比较和查找的名称相关场景,如资源名称、属性名称、标签名称等。FName 内部使用了一个全局的名称查找表,通过对字符串进行哈希处理,使得比较操作非常快速。

  FText 是虚幻引擎用于处理本地化文本的类型。在游戏开发中,为了适应不同的语言和地区,需要对文本进行本地化处理,FText 就是为此设计的。它可以根据当前游戏的语言设置动态地显示正确的本地化文本。

常用操作示例

一、FString

1.1 创建字符串

在UE中,有如下三种创建FString类型变量的方式。

FString MyString1 = FString(TEXT("Hello, World!"));FString MyString2 = TEXT("Hello, World!");FString MyString3 = "Hello, World!";

1.2 字符串拼接 

 使用 + 运算符:

FString FirstName = TEXT("Flynt");
FString LastName = TEXT("Lovett");
FString FullName = FirstName + LastName;

使用 Append 函数:

FString Greeting = TEXT("Hello");
Greeting.Append(", How are you?");

1.3 字符串长度

使用 Len 函数:

FString MyString = TEXT("Test String");
int32 Length = MyString.Len();

1.4 字符串查找

使用 Find 函数查找子字符串在原字符串中的位置:

FString MyString = TEXT("This is a test string");
int32 Position = MyString.Find(TEXT("test"));  //10

1.5 字符串替换

Replace 方法返回新的替换后的字符串副本,原字符串保持不变,适用于需要保留原字符串并获取替换结果副本的场景,比如在函数中返回处理后的字符串,同时不影响传入的原始字符串。

ReplaceInLine 直接修改原字符串,更适合当你确定要在当前字符串实例上进行修改,不需要额外保留原字符串的情况,例如在对一些临时构建的字符串进行就地修改时使用

Replace: 

FString MyString = TEXT("I like apples");
MyString = MyString.Replace(TEXT("apples"), TEXT("bananas"));
UE_LOG(LogTemp, Warning, TEXT("New String: %s"), *MyString);  //New String: I like bananas

 ReplaceInline:

FString MyString = TEXT("I like apples");
MyString.ReplaceInline(TEXT("apples"), TEXT("bananas"));
UE_LOG(LogTemp, Warning, TEXT("New String: %s"), *MyString);  //I like bananas

1.6 比较字符串

比较两个 FString 的大小可以使用比较运算符(==!=<><=>=),比较规则是基于字典序:

FString String1 = TEXT("Apple");
FString String2 = TEXT("Banana");
if (String1 < String2)
{// String1在字典序中排在String2之前
}

二、FName

2.1 创建FName

FName MyName = FName(TEXT("MyObjectName"));

2.2 比较FName

由于 FName 的哈希表机制,这种比较操作非常高效,尤其适用于大量名称比较的场景,如游戏资源加载时检查资源名称是否匹配。比较两个 FName 使用 == 运算符:

FName Name1 = FName(TEXT("Player"));
FName Name2 = FName(TEXT("Player"));
if (Name1 == Name2)
{// 两个名称相同
}

2.3 在容器中使用 FName

因为 FName 的高效比较特性,它经常用于作为容器(如 TMapTSet)的键类型,例如:

TMap<FName, int32> NameToValueMap;
FName KeyName = FName(TEXT("MyKey"));
int32 Value = 10;
NameToValueMap.Add(KeyName, Value);

三、FText

3.1 创建FText

FText MyText = FText::FromString(TEXT("Hello, World!"));
FText LocalizedText = FText::FromString(NSLOCTEXT("MyNamespace", "MyKey", "This is a localized text").ToString());

NSLOCTEXT 宏用于定义本地化文本的键和默认文本内容,它返回一个 FText 对象,在实际运行时,根据游戏的本地化设置,会从本地化资源文件中查找真正的本地化文本。

3.2 格式化FText

在如下代码中,通过 FText::Format 函数,将 AppleCount 的数值格式化为文本后替换到 {0} 的位置,生成最终的格式化文本。

FTextFormat Format = FTextFormat::FromString(TEXT("You have {0} apples."));
int32 AppleCount = 5;
FText FormattedText = FText::Format(Format, FText::AsNumber(AppleCount));

3.3 显示文本控件内容

在  UI 系统中,通常使用 FText 来显示文本内容,如下: 

UCLASS()
class MYGAME_API UMyWidget : public UUserWidget
{
public:void UpdateText(){FText DisplayText = FText::FromString(NSLOCTEXT("MyNamespace", "MyWidgetText", "Widget Text").ToString());MyTextBlock->SetText(DisplayText);}
};

这样当游戏语言设置发生变化时,FText 会自动从本地化资源文件中获取新的本地化文本并显示,无需开发者手动干预。

 FString、FName、FText类型的转换

一、 FString、FName、FText互转

FString TestString = TEXT("Test String");//FString->FName
FName TestName = FName(*TestString);//FString->FText
FText TestText = FText::FromString(TestString);//FName->FString
FString TestString2 = TestName.ToString();//FName->FText
FText TestText2 = FText::FromName(TestName);//FText->FString
FString TestString3 = TestText.ToString();//FText->FName
FName TestName2 = FName(TestText.ToString());

二、其它类型转FString

//float->FString
float MyFloat = 109.3f;
FString FloatString = FString::SanitizeFloat(MyFloat);//int32->FString
int32 MyInt = 99;
FString IntString = FString::FromInt(MyInt);//bool->FString
bool bMyBool = true;
FString BoolString = bMyBool ? TEXT("true") : TEXT("false");//FVector->FString
FVector Mylocation = FVector(100.0f, 20.f, 30.f);
FString VectorString = Mylocation.ToString();//FVector2D->FString
FVector2D MyVector2D = FVector2D(100.0f, 20.f);
FString Vector2DString = MyVector2D.ToString();//Rotation->FString
FRotator MyRotator = FRotator(40.f, 50.f, 60.f);
FString RotatorString = MyRotator.ToString();//FLinearColor->FString
FLinearColor MyColor = FLinearColor::Blue;
FString ColorString = MyColor.ToString();//UObject->FString
AActor* MyActor = this;
FString ActorString = (MyActor != nullptr) ? MyActor->GetName() : FString(TEXT("None"));

三、FString转其它类型

//FString->bool
bool MyBackBool = BoolString.ToBool();//FString->int
int32 MyBackInt = FCString::Atoi(*IntString);//FString->float
float MyBackFloat = FCString::Atoi(*FloatString);


http://www.ppmy.cn/devtools/145255.html

相关文章

计算机网络压缩版

计算机网络到现在零零散散也算过了三遍&#xff0c;一些协议大概了解&#xff0c;但总是模模糊糊的印象&#xff0c;现在把自己的整体认识总结一下&#xff0c;&#xff08;本来想去起名叫《看这一篇就够了》&#xff0c;但是发现网上好的文章太多了&#xff0c;还是看这篇吧&a…

Windows开启IIS后依然出现http error 503.the service is unavailable

问题背景 已启用IIS服务&#xff0c;配置步骤可以参考Windows10 IIS Web服务器安装配置 问题描述 在这一步浏览网站时&#xff0c;并没有出现默认首页&#xff0c;而是 http error 503 the service is unavailable 问题解决 参考 成功解决http error 503.the service is un…

uniapp微信小程序,使用fastadmin完成一个一键获取微信手机号的功能

前端部分 点击按钮&#xff0c;获取手机号 <button open-type"getPhoneNumber" getphonenumber"bindGetPhoneNumber" hover-class"none"class"btn-purity">一键获取</button> 传入openid和code bindGetPhoneNumber(e) …

C++练习:图论的两种遍历方式

一、遍历 一提到遍历&#xff0c;我们首先想到的肯定是树的遍历。因为在数据结构中我们是从树引出图的。但图明显比树更常见&#xff0c;更丰富&#xff0c;更多变。所以我们可能会被树的一些知识所固化了思维。比如树的遍历有前、中、后遍历&#xff0c;或者深度优先、广度优…

我用Cursor+DeepSeek做了个飞书文档一键同步插件,免费使用!

作为一个飞书文档的重度使用者&#xff0c;我基本上都是先在飞书上写好文章&#xff0c;然后再想办法搬到其他平台上&#xff0c;所以对飞书一键同步有很强的需求。​ 于是我决定做个插件来支持飞书文档的同步。​ 说实话我是第一次玩插件&#xff0c;源代码看起来有些陌生&a…

在 .NET Core 中使用 ActionBlock 实现高效率的多步骤数据处理

一、引言 本篇使用 ActionBlock 二、ActionBlock介绍 什么是 ActionBlock? ActionBlock是 .NET 中 TPL Dataflow 库的一部分,用于处理数据流和并行任务。它提供了一种简单而强大的方式来处理并行任务,并且可以轻松地实现生产者-消费者模式。 ActionBlock 的特点 并行处…

SpringBoot 依赖之Spring Web

SpringBoot 依赖之 Spring Web 详细介绍 Spring Web 依赖的内容&#xff1a; 第 1 章&#xff1a;Spring Web 1. 简介 功能描述 英文: Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.中文译文&…

【AscendC】记录LpNorm的tiling方案中用到的一些变量

LpNorm的官方仓库链接在operator_contrib/LpNormV2CustomSample/FrameworkLaunch/LpNormV2Custom。观察其tiling方案可以看到&#xff0c;有几个比较特殊的变量&#xff1a;pType,pValue,stepSize,unitCount&#xff0c;totalLength。下面结合代码分别对其进行分析。 pType 类…