TomLooman_ActionRoguelike_第六章调试工具
该专栏用于保存对TomLooman的ActionRoguelike项目的学习笔记,学习过程中的思考与记录不一定准确。
教程参考:https://github.com/tomlooman/ActionRoguelike
基于UE5.0的项目实现:https://github.com/CarolBaggins2023/TomLooman_ActionRoguelike_Tutorial

2023_08_02
调试工具:调试C++和蓝图、相机的变化和十字准星、用于主动检测的错误的assert
在SExplosiveBarrel.cpp中实现了爆炸时打印调试信息,包括打印在OutputLog里和打印在3D世界中。

UE_LOG的函数接口为UE_LOG(CategoryName, Verbosity, Format, ...),其中CategoryName是打印的类别,Verbosity是信息的详细程度,Format是日志的消息内容。
在UE中,输出字符串要加TEXT(),其作用是保证在不同环境下字符串仍能输出正确。需要注意的是,%s的内容不能是FString,而要是const wchar_t*,可以通过在FString前加*
得到(如第二句)。
UE_LOG的输出效果如下图所示,


DrawDebugString能将调试信息直接打印在3D世界中,FString类型的变可由FString::Printf(TEXT())创建。
DrawDebugString
的输出效果如下,由于我们代码中调试信息的输出位置是Hit.ImpactPoint,所以调试信息在爆炸点出现。

在蓝图中设置break point的方法

未运行时

运行中触发断点时

蓝图中的断点也可以被disable

Camera在Character正后方时,Character会挡住一定的视野,所以我们想把Camera的位置调整到偏右侧。
不能像下面那样直接调整Camera,因为这样会让Camera和SpringArm的相对位置错误,导致出现Camera穿墙的情况。

正确的做法是在SpringArm中调整Camera的位置,如下

只是单纯地调整Camera的位置的话,Character射出的子弹不再落在屏幕中心,而是会落在偏左的位置。原因和解决方案下面讲。
现在我们先在屏幕上添加一个准心。方法是创建一个WidgetComponent(控件组件)的蓝图类,添加一个Panel和一个Image(Image的初始窗台是白色矩形),并让Image位于Panel的中心。
Widget组件允许我们在游戏场景中用Unreal Motion Graphics(UMG,虚幻示意图形)来创建3D UI,可以与之交互。


然后在Character的蓝图中将这个Widget显示在屏幕上,

效果如下,

UE中的Assertion(断言)能够提醒我们哪里的程序出现了问题。Assertion相当于用if语句判断指针是否非空,但用if语句判断后要显式地让代码停止运行或中断程序,而Assertion会根据使用的断言自动决定是继续程序还是中断程序。
UE中的Assertion包括check、verify和ensure(ensure在触发断言时不会终止程序,而是通知崩溃报告器,此时编辑器会卡顿一段时间)。