目录
课程中首先提到了一个重要的点,就是尽量不要使用UE的热重载,即修改保存C++代码后不关闭UE直接使用它的编译功能。因为这个功能不太稳定,比较容易出Bug,就算UE提示编译完成也有几率出错(我自己也遇到过,还因为这个bug反复排查自己的代码...)。所以,在修改C++代码后尽量选择关闭UE,再在VS中使用编译打开UE,这样可以尽可能确保代码生效。
这节会在之前第6节实现的炸药桶基础上,展示一些在UE中Debug的技巧。
1. 更新炸药桶
在之前的第6节,我们已经实现了炸药桶受击后发出冲击力的效果。但在上一节的内容中,我们更改了魔法粒子的蓝图,修改了自定义碰撞预设Projectile的配置,导致现在的炸药桶不能再被魔法粒子触发了。因此,在开始Debug相关的内容前,我们需要对炸药桶进行一些改变。
之所以炸药桶不爆炸,是因为没有执行SurExplosiveBarrel.cpp中的OnActorHit函数。在第6节的内容中我提到“暂时没有理解代码中OnActorHit()的调用方式,待以后补充”,所以刚好在这个地方学习一下。
在官方文档中对这个函数的说明略少,因此从课程提供的项目源码入手。在仔细阅读了课程提供的源码后,我得知OnActorHit函数是以“组件命中时(OnComponentHit)”事件的形式被UE自动调用的(UE蓝图中已经有OnComponentHit这个事件节点了,代码中传入的一大堆输入其实也是这个节点的引脚)。所以,我们在C++中编写的函数需要绑定到这个事件上才能生效。在之前第6节进行实现时,我复制了完整的课程源码并运行成功,但出于精简知识点的目的,我一边热重载一边删除其中的代码,在当时项目也的确正常运行了,不知道这是不是UE热重载的bug...
在补充了绑定事件的代码后,炸药桶可以成功被魔法粒子触发了,完整代码见末尾。这里要注意,打开炸药桶的“模拟物理”,否则炸药桶会在原地一动不动;关闭炸药桶的“模拟生成命中事件”,否则炸药桶一落地就自动爆炸,如图12-1:
2. 输出调试信息
这部分将介绍几个在UE开发中输出调试信息的方法,方便日后我们开发时的debug工作。
首先,使用日志是各种计算机开发都必不可少的环节,在UE中可以使用UE_LOG来输出日志。课程给出了英文的wiki,其中对日志做了比较详细的介绍。示例用法如下:
UE_LOG(LogTemp, Log, TEXT("OtherActor is %s, at game time %f"), *GetNameSafe(OtherAc