UE4基本数据类型

01 数字类型

bool:代表布尔值 (永远不要假设布尔值的大小) BOOL 将不会进行编译
TCHAR:代表字符型(永远不要假设TCHAR的大小)

uint8:代表无符号字节(占1个字节)
int8:代表有符号的字节(占1个字节)
uint16:代表无符号"短整型" (占2 个字节)
int16:代表有符号"短整型" (占2 个字节)
uint32:代表无符号整型(占4字节)
int32:代表带符号整型(占4字节)
uint64:代表无符号"四字" (8个字节)
int64:代表有符号"四字"(8个字节)

float:代表单精度浮点型 (占4 个字节)
double:代表双精度浮点型 (占8 个字节)
PTRINT代表可以存放一个指针的整型 (永远不要假设PTRINT的大小)

02 字符串

UE4内建字符串有3种类型:FString、FName和FText。

最常见的是 FString 类型,FNameFText 属于不可变字符串,一经创建其中的内容就无法改变。FString 属于可变字符串,可以对其常规的字符串操作,如分片,大小写转换等操作,编程时使用较多的也是它。三者之间可以进行相互转换。

FName

FName是无法被修改的字符串,不区分大小写,主要用于标识资源路径,它的优点就是查找和访问速度快。因为借助哈希表,从字符串到FName的转换,根据Key查询FName会变得非常快。

创建
FName TestHUDName = FName(TEXT("ThisIsMyTestFName"));

FText

FText表示一个“被显示的字符串”,因为TExt提供了内置的本地化支持,通过一张查找表来支持运行时本地化。

主要用于文本本地化。

FString

FString是唯一提供修改操作的字符串类,如:大小写转换、截取字符串、逆向等。由于FString是可变的,所以对其进行查找、对比等时开销比不可变字符串类更大。

创建
FString TestHUDString = FString(TEXT("This is my test FString."));
对比

重载的 == 运算符可用于两个 FString 的对比,或把 FString 比作一个 TCHAR*s 阵列。此外还有 FString::Equals() 法, 用 FString 进行测试,用 ESearchCase 枚举进行对比,确定是否作为参数忽略大小写。如希望对比忽略大小写,使用 ESearchCase::IgnoreCase; 如不忽略,则使用 ESearchCase::CaseSensitive

TestHUDString.Equals(TEXT("Test"), ESearchCase::CaseSensitive);
搜索

在 FString 中搜索时有两种搜索类型。第一种是 FString::Contains(),找到子字符串后返回 true,否则返回 false。 FString::Contains() 可搜索 FString 或 TCHAR*s 子字符串。ESearchCase 枚举可用于指定搜索是否忽略大小写。此外,ESearchDir 枚举可用于指定搜索的方向。 默认设置为忽略大小写,从开始执行搜索。

TestHUDString.Contains(TEXT("Test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd);

第二种是 FString::Find(),返回找到的第一个子字符串实例的索引。FString::Find() 可对 FStringTCHAR*s 子字符串进行搜索。 和 FString::Contains() 一样,可对大小写敏感度和搜索方向进行指定,默认设置为忽略大小写并从字符串开头开始搜素。也可在索引中任选一个索引开始搜索。 如 FString::Find() 未找到子字符串,它将返回 -1。

TestHUDString.Find(TEXT("test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd, 10);
构建

可通过两种方法用子字符串或其他变量类型构建字符串。首先,串联只接受 FString 作为参数。在串联其他类型的变量时需要将其转换为 FString。 第二,Printf 可接受数字输入(如 int 和浮点),在输入被添加到字符串时还可对其格式进行设置。

串联:有两个运算符用于串联字符串

运算符描述用法
+=将提供的字符串附加到 FString 对象。StringResult += AddedString;
+新建一个 FString 对象并附加提供的字符串。

Printf:FString::Printf 构建的 FString 可被存入 FStrings,并与 UE_LOG调试信息 一同显示到屏幕上。 格式参数拥有和 C++ printf 函数相同的说明符,如下例所示

FString AShooterHUD::GetTimeString(float TimeSeconds)
{
// only minutes and seconds are relevant
const int32 TotalSeconds = FMath::Max(0, FMath::TruncToInt(TimeSeconds)%3600);
const int32 NumMinutes = TotalSeconds / 60;
const int32 NumSeconds = TotalSeconds % 60;

const FString TimeDesc = FString::Printf(TEXT("%02d:%02d"), NumMinutes, NumSeconds);
return TimeDesc;
}

注意:使用 %s 参数包含 FStrings 时,必须使用 * 运算符返回 %s 参数所需的 TCHAR。

操作字符串
调试信息

FString 可被打印到 视口输出日志,以便进行调试。

视口:使用 UEngine::AddOnScreenDebugMessage() 将调试信息打印到 视口

GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, TestHUDString);//参数按照顺序
参数名参数类型描述
Keyint防止相同信息多次添加的唯一键。使用 -1 作为键,使调试信息短时出现。
TimeToDisplayfloat信息显示时长,按秒计
DisplayColorFColor文本显示的颜色
DebugMessageFString显示的信息(FString)

输出日志:UE_LOG 使用 printf 标记进行参数化。

UE_LOG(LogClass, Log, TEXT("This is a testing statement.%s"), *TestHUDString);
  • LogClass 为日志类别。可使用现有的类别(在 OutputDevices.h 中用 DECLARE_LOG_CATEGORY_EXTERN 宏设置)或使用 DEFINE_LOG_CATEGORY_STATIC 自行定义。
  • Log 为使用的冗余度。冗余度在 ELogVerbosity 枚举中被定义。有效值为 Fatal、Error、Warning、Display、Log、Verbose 或 VeryVerbose。
  • 下一个参数即为希望输出的文本,包括对参数的标记。

注意:此范例使用一个 %s 参数,因此 * 运算符用于返回 %s 参数所需的 TCHAR*。

使用 UE_LOG 打印的信息位于 Output Log 中(虚幻编辑器中 Window > Output Log)。

TName、FText和FString的类型转换

范例
FNameFStringTestHUDString = TestHUDName.ToString();
FNameFTextTestHUDText = FText::FromName(TestHUDName);FName -> FText 在一些情况下有效,但需注意 — FNames 内容不会从 FText 的"自动本地化"中受益。
FStringFNameTestHUDName = FName(*TestHUDString);FString -> FName 不可靠。因为 FName 不区分大小写,所以转换存在损耗。
FStringFTextTestHUDText = FText::FromString(TestHUDString);FString -> FText 在一些情况下有效,但需注意 — FString 内容不会从 FText 的"自动本地化"中受益。
FTextFStringTestHUDString = TestHUDText.ToString();FText -> FString 不可靠。它在一些语言的转换中存在潜在损耗。
FTextFNameFText 到 FName 的转换不存在。但可先转换到 FString,再转换到 FName。FText -> FString -> FName 不可靠。因为 FName 不区分大小写,所以转换存在损耗。
FStringint32int32 TestInt = FCString::Atoi(*MyFString);
FStringfloatfloat TestFloat = FCString::Atof(*MyFString);
int32FStringFString TestString = FString::FromInt(MyInt);
floatFStringFString TestString = FString::SanitizeFloat(MyFloat);
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值