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

news/2024/12/26 11:17:22/

目录

概念

常用操作示例

一、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/news/1558253.html

相关文章

【数据分析】层次贝叶斯

文章目录 一、 贝叶斯推理二、 层次贝叶斯模型三、 层次贝叶斯的特点四、 数学表述五、推断方法六、应用领域 层次贝叶斯&#xff08;Hierarchical Bayesian&#xff09;方法是一种基于贝叶斯推理的统计模型&#xff0c;用于处理具有多个层次结构的数据模型。 它允许我们在同一…

如何使用PSQL Tool还原pg数据库(sql格式)

新建一个数据库用来还原&#xff1b;选择新建的数据库&#xff0c;右键选择【PSQL Tool】&#xff0c;打开PSQL Tool命令行界面&#xff1b;赋予pg库对sql文件的执行权限&#xff0c;否则会报“Permission denied”的错误&#xff0c;命令如下&#xff1a; chmod urwx D://NoS…

UE5 崩溃问题汇总!!!

Using bundled DotNet SDK version: 6.0.302 ERROR: UnrealBuildTool.dll not found in "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" 在你遇到这种极奇崩溃的BUG &#xff0c;难以解决的时候。 尝试了N种方法&#xff0c;都不行的解决方法。…

全国硕士研究生入学考试(考研)备考要点之具体科目

考研备考要点详解&#xff1a;具体科目复习策略与关键建议 在中国&#xff0c;考研&#xff08;研究生入学考试&#xff09;是本科生提升学历、深化专业知识和拓展职业发展的重要途径。考研备考过程中&#xff0c;各科目的复习策略与方法至关重要&#xff0c;直接影响考生的考…

在Nginx部署Web应用,如何保障后端API的安全

1. 使用HTTPS和http2.0 参考&#xff1a;Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客 2. 设置严格的CORS策略 通过add_header指令设置CORS头。 只允许来自https://frontend.yourdomain.com的请求访问API location /api/ {if ($http_origin ~* (https://frontend\.yourdomai…

【视觉惯性SLAM:编译及编译工具】

一、C C 在 SLAM 编译中的重要性 C 的优势 SLAM 系统需要处理大量的数学运算&#xff08;如矩阵运算、优化求解&#xff09;和实时性要求&#xff08;如传感器数据流的处理&#xff09;。C 是一种高性能、灵活的语言&#xff0c;具有以下优势&#xff1a; 高效性能&#xf…

Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena

指令微调后的模型不一定在传统Benchmark上取得更好的结果&#xff0c;类似MMLU和HELM。根据人类爱好对齐后的模型&#xff0c;需要新的评测方法。 文章提出了两个主要内容&#xff1a;MT-bench和Chatbot Arena MT-bench是一系列开放式问题&#xff0c;用于评估聊天机器人的多回…

Day7补代码随想录 454.四数相加II 383赎金信 15.三数之和 18.四数之和

链接 https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html 454.四数相加II 题目 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j,…