UEC++第四天(补充)|FString、日志

day04

虚幻引擎中的日志记录 | 虚幻引擎 5.5 文档 | Epic Developer Community

1.FString

FString可以搜索和修改并且可以与其他字符串进行比较。FString的开销比不可变字符更大。

这是因为FString保存自己的数组,而FNameFText 对象保存字符对象的指针

快速入门

FString TestHUDString = FString(TEXT("这是我的测试FString"))

常见问题

  1. 未包含头文件:忘记包含相关头文件导致编译错误。需确保包含<CoreMinimal.h>等相关头文件。
  2. TEXT 宏使用不当:TEXT 宏用于将字符串字面量转换为适合 UE4 的格式,若遗漏会导致编码问题。始终使用 TEXT 宏包裹字符串字面量。
  3. 与 std::string 混淆:FString 和 std::string 在使用上有差异,如方法调用、内存管理等。要明确使用的是 UE4 的 FString,注意其特定的方法和规则。而且需要注意FString是支持跨平台的,而有的c++标准库可能对有些平台不支持。

转换字符串变量

TestHUDName = FName(*TestHUDString);

FString 转 FName不可靠, 因为FName不区分大小写。

TestHUDText = FText::FromString(TestHUDString);
  1. 虚幻中UEC++的 ::是什么
    • 错误:混淆 “::” 和 “.” 运算符。“.” 用于访问对象的成员,而 “::” 用于作用域解析。避免方法:牢记两者用途,在使用时思考是访问对象成员还是指定作用域。
    • 误解:认为 “::” 只能用于类的静态成员。实际上也可用于命名空间等。避免方法:多了解 “::” 在不同场景的使用,如全局变量、命名空间作用域等。
    • 错误:在不必要时滥用 “::”。比如在类成员函数内访问成员变量,无需使用 “::”。避免方法:明确当前作用域,仅在需要明确作用域时使用。

常见场景有访问全局变量(当局部变量与全局变量同名时),调用类的静态成员,访问嵌套在其他类中的类型等。

在UEC++ 中 ,::是一个作用域解析运算符。明确指定使用的变量函数和类型是属于哪一个命名空间、类或者结构体。

2.虚幻引擎的数据类型

  • 虚幻引擎的聪明之处:抹平平台棱角
  • 数据类型规范方式:设置整形大小
  • 整形类型:int 8、int 16、int 32、int 64
  • UEC无符号整形类型:uint 8、uint 16、uint 32、uint 64
  • 引擎维护数据大小:保证跨平台一致性
  • 引擎特性:设计了一套与平台无关的数据类型

3. 日志记录

日志是一种实用的调试工具,可以详细说明代码的执行逻辑。可以检查函数之间传递的数据值,暴露出问题

虚幻引擎提供了多种方法来记录日志。在虚幻引擎中打开窗口(Window) > 输出日志(Output Log) 查看虚幻编辑器中的日志。

输出日志窗口

UE_LOG

它是一个宏,记录格式化消息到日志文件中。

UE_LOG(LogTemp, Warning, TEXT("Hello world"));

这是LogTemp是提供给DEFINE_LOG_CATEGORY你可以在引擎中找到这些类别名称。

可以在CoreGlobals.h中找到这些类别。

第二个是 Warning是一个日志详细级,用于讲将警告打印到控制台和日志文件中。你可以设置不同的详细程度。

第三个输入参数Text是C语言库函数printf样式中字符串文字的格式

下面是一个详细的表格,可以需要的时候再参考

致命(Fatal)始终将致命错误打印到控制台和日志文件,即使禁用日志记录,也会出现崩溃。
错误(Error)将错误打印到控制台和日志文件。Commandlet和编辑器会收集并报告错误。错误消息导致commandlet故障。
警告(Warning)将警告打印到控制台和日志文件。Commandlet和编辑器会收集并报告警告。
显示(Display)将消息打印到控制台和日志文件。
日志(Log)将消息打印到日志文件,但不打印到控制台。
冗长(Verbose)如果为给定类别启用了冗长日志记录,则将冗长消息打印到日志文件。 这通常用于详细日志记录。
极其冗长(VeryVerbose)将冗长消息打印到日志文件。如果启用了极其冗长日志记录,则这将用于详细日志记录,否则将产生垃圾信息输出。下面是一些日志掩码和特殊枚举值示例:VeryVerbose,NumVerbosity,VerbosityMask = 0xf,SetColor = 0x40, // not actually a verbosity, used to set the color of an output device BreakOnLog = 0x80Copy full snippet

日志记录基础数据类型a

  1. FString

    UE_LOG(LogTemp, Warning, TEXT("An Actor's name is %s"), *ExampleActor->GetName());
    

    记录一条警告级别的日志,输出到某个Actor的名称。

  2. 浮点

    UE_LOG(LogTemp, Warning, TEXT("The float value is: %f"), ExampleFloat);
    
  3. 整形

    UE_LOG(LogTemp, Warning, TEXT("The integer value is: %d"), ExampleInteger);
    
  4. 布尔

    UE_LOG(LogTemp, Warning, TEXT("The boolean value is %s"), ( bExampleBool ? TEXT("true"): TEXT("false") ));
    

自定义日志类型

你可以自定义日志类型并且讲它在代码中使用。如果需要有多个文件以及框架需要进行不同的分类,这个功能会非常的实用

DECLARE_LOG_CATEGORY_EXTERN(<LOG_CATEGORY>, <VERBOSITY_LEVEL>, All);

解释:

声明_日志_类别 扩展(<日志_类别>,<冗余等级>,全部)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值