GCS调试指南

介绍
战斗系统通常涉及到多个方面,如输入绑定,技能激活与否,碰撞判定成功与否,伤害计算正确与否,战斗结果正确与否。
战斗系统相比一般其他的系统,更难以调试和定位问题。
本文介绍常规调试的思路,它不仅仅适用于GCS,也适用于大多数复杂项目。
调试流程
每当你认为产生了问题或者Bug时,你可以按照如下思路(从上往下),快速定位到是哪一个方面,从而进行排查。
战斗结果正确与否
若你打中一个人,但没任何效果。
你应该直接在CombatFlow打断点,
若断点执行,那么则可以判定问题出在对战斗结果的处理上(检测AttackResultProcessor的配置,或者检查CombatFlow里的逻辑正确性等)。
如果断点完全没触发,则问题出在下面的某一个流程。
同时你要注意,CombatFlow的回调是通过AttributeSystemComponent转发过来的,你得先确保你有这个组件。
伤害计算正确与否
找到你最终要应用的GE上面的MMC/Execution打断点(比如GCS自带的Execution),在里面打断点。GCS中给予目标的GE一般在攻击定义表里配置的。
如果断点触发,那你得检查你的Execution确实给出了有效的数值输出,如果伤害计算没有给对面造成有效的数值修改,或者Execution所参与的某个属性并不存在(检查AttributeSet到底有没有),则后续的流程都不会触发(战斗结果,表现等)。
如果断点完全没触发,则问题出在下面的某一个流程。
碰撞判定成功与否
GCS中与碰撞检测相关的都采用了自带的GameplayTargetingSystem,你可以在这里了解到如何调试/可视化碰撞判定。
如果没打中任何东西,你应该检查子弹/武器/Montage当前所激活/关联的碰撞检测实例,是否采用了正确的TargetingPreset配置(更进一步的,可能是因为阵营相同被过滤了等等)。
如果确实有打中东西,则问题出在下面的某一个流程。
输入触发
GIPS有调试指南可以参考,同时你也可以在所引用的InputChecker/Processor蓝图中打断点来判断输入逻辑是否执行。
如果输入确实有执行,则问题出在下面的某一个流程。
否则问题就是在输入这里,检查输入映射配置,以及输入处理的逻辑正确性。
技能的激活与否
这里列出了调试GAS的常规手段。
首先你的确保目标技能到底给了没(打开对应蓝图,检查调试下拉列表有没有该技能实例。)
然后在对应的技能蓝图中打断点,看是否有执行。有执行,那一般就是技能的内部逻辑错误,没有触发后续的流程。
没有执行,那第一步排查的就是技能内部的CanActiveAbility确保没有自定义逻辑在阻断激活。
其次,才到了最难以排查的环节:配置错误。
技能阻挡/取消标签配置多了,乱了,也会阻碍技能的激活。一般这种情况下最好是提升GAS的Log等级,查Log。
很多时候技能的无法激活,都是因为Tags不满足条件造成的。