一、FName
特点:不区分大小写,不可变,查询&访问速度快,重复使用也只存储一次
使用:
创建:使用FString转为FName
FName TestHUDName = FName(TEXT("ThisIsMyTestFName"));
转换:FName只能转换成FString和FText,但是只支持从FString转FName
FName->FString:TestHUDString = TestHUDName.ToString();
FString->FName:TestHUDName = FName(*TestHUDString);//类似于创建过程
FName->FText:TestHUDText = FText::FromName(TestHUDName);
比较:两种方法
1.==
2.相当于TestFname-OtherFname,小于返回小于0,等于返回等于0,大于返回大于0
CompareFloat = TestFName.Compare(OtherFName);
确定FName是否存在:使用FNAME_Find标记
if( FName(TEXT("pelvis"), FNAME_Find) != NAME_None )
{
// Do something
}
2.FText
可本地化的文本,具有文本历史记录,使用FText::AsCultureInvariant可以生成一个没有本地化的数据(且不能本地化)的FText实例。
也可以使用“INVTEXT”宏实现。
可以使用FText::GetEmpty()或仅适用FText()创建空白FText
文本文字值:
本地化文本由三个部分组成:命名空间,标识(密钥),字符串;
使用C++创建:
方法一:
FTextWorld=NSLOCTTEXT("命名空间","标识","字符串");
NSLOCTEXT("MyOtherNamespace","HelloWorld","Hello World!")
方法二:
#define LOCTEXT_NAMESPACE "命名空间"
FTextWorld=LOCTTEXT("标识","字符串");
#undef LOCTEXT_NAMESPACE
两种方法的区别仅仅是命名空间的表达方式。
且第一种方法还可用于在INI文件中创建FText。
文本格式化:
提供将文本进行组合,以便进行格式化的方法,可以使用格式化的占位符来建立,如:
基于索引的格式化:"您还剩 {0} 点生命值。
"
基于名称的格式化:"您还剩 {CurrentHealth} 点生命值。
"
格式占位符还可以指定一个函数(称为"参数修饰符")在其参数数据上运行。
它们被指定为一个管道,后面跟着函数名和参数:"{NumCats} {NumCats}|plural(one=cat,other=cats)"
使用C++进行文本格式化:
FText::Format,可以接受基于索引或者基于名称的参数,如:
TextItem.Text = FText::Format(LOCTEXT("ExampleFText", "You currently have {0} health left."), CurrentHealth);
FText::FormatOrdered or FText::FormatNamed
蓝图中文本格式化:节点Format Text处理
文本转数值:这种转化与文化相关——例如,依照默认生成规则,浮点数"1234.5"将生成为英语格式的"1,234.5",法语格式的"1 234,5",和阿拉伯语格式的"١٬٢٣٤٫٥"。
以下是AsNumber的示例,第二个参数是对格式的设置。
static FText AsNumber
(
float Val,
const FNumberFormattingOptions *const Options,
const FCulturePtr & TargetCulture
)
这里给出更多的可选函数。
蓝图中的数值型生成:
C++时间型数据生成:
以下是AsDate的定义
static FText AsDate
(
const FDateTime & DateTime,
const EDateTimeStyle::Type DateStyle,
const FString & TimeZone,
const FCulturePtr & TargetCulture
)
使用EDateTimeStyle来规定格式,其具体类型如下:
namespace EDateTimeStyle
{
enum Type
{
Default,
Short,
Medium,
Long,
Full,
Custom,
}
}
蓝图中时间型数据生成:
对应于C++,蓝图也提供了一组节点用于数据的生成:
C++大小写变换:
Text::ToLower or Text::ToUpper
蓝图大小写变换:
Text to Lower or Text to Upper
比较:
EqualTo or CompareTo
在带画布的HUD系统上显示FText,要利用FCanvasTextItem空间,将Text变量设置为显示的文本:
// Create a new FCanvasTextItem instance to contain the text.
FCanvasTextItem TextItem(FVector2D::ZeroVector, TestHUDText, BigFont, FLinearColor::Black);
// Add the text into the FCanvasTextItem.
TextItem.Text = FText::Format(LOCTEXT("ExampleFText", "You currently have {0} health left."), CurrentHealth);
// Draw the text to the screen with FCanvas::DrawItem.
Canvas->DrawItem(TextItem, 10.0f, 10.0f);
FName和FText都是不可更改的,施工过保存共享字符数组的指针实现的,可以根据索引建立相等关系。
三、FString
可进行搜索,修改与比较,开销相比FName与FText较大。
创建:使用TEXT宏
FString TestHUDString = FString(TEXT("This is my test FString."));
转换:
FString->FName:TestName=FName(*TestString);
FString->FText:TestText=FromString(TestString);//对比FName转FText,都是FromXX函数
由于FText转FName不被允许,可以先转为FString(Text.ToString()),然后FString转化为FName。
FName和FText转化为FString都是ToString函数。
数字转为FString:
从FString到数字/bool
比较:
1.==
2.FString::Equals:
TestHUDString.Equals(TEXT("Test"), ESearchCase::CaseSensitive);
参数ESearchCase 确定是否作为参数忽略大小写。
忽略大小写ESearchCase::IgnoreCase;否则使用 ESearchCase::CaseSensitive 。
搜索:
1.FString::Contains()
ESearchCase 参数同上,而ESearchDir参数指定搜索方向,默认从头开始
TestHUDString.Contains(TEXT("Test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd);
2.FString::Find():返回找到的第一个子字符串索引 (最后一个参数或为相对设定搜索开始的偏移)
TestHUDString.Find(TEXT("test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd, 10);
构建FString:使用子字符串&其他变量类型构建
1.串联只接受FString作为参数,其他类型应先转化为FString;
2.Printf可接受数字输入(浮点,int)。
串联使用的运算符:+=和+
FString TimeDesc = FString::Printf(TEXT("%02d:%02d"), NumMinutes, NumSeconds);
在HUD中使用FString:
Canvas->DrawText(BigFont, TestHUDString, 110.0f,110.0f);
必须在 HUD 类的 DrawHUD() 函数中调用 DrawText() 函数,或在以 DrawHUD() 开始的函数链中调用。
向屏幕打印提示信息:
UEngine::AddOnScreenDebugMessage()
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, TestHUDString);
打印到控制台(输出日志):UE_LOG
UE_LOG(LogClass, Log, TEXT("This is a testing statement.%s"), *TestHUDString);
四、字符编码
肝不动了,: (
字符编码 | 虚幻引擎文档 (unrealengine.com)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)