6. Debugging GAS
在调试与GAS相关的问题时,您通常想知道以下内容:
- “我的
Attribute是多少?”- “我有哪些
GameplayTag?”- “我当前有哪些
GameplayEffect?”- “我有哪些被授予的
GameplayAbility,哪些正在运行,哪些被阻止激活?”
GAS提供了两种技术来在运行时回答这些问题 - showdebug abilitysystem 和在 GameplayDebugger 中的Hook。
提示: 虚幻引擎喜欢优化C++代码,这使得调试某些函数变得困难。当深入追踪代码时,您可能会很少遇到这种情况。如果将Visual Studio解决方案配置设置为DebugGame Editor仍然无法追踪代码或检查变量,您可以通过将优化函数用UE_DISABLE_OPTIMIZATION和UE_ENABLE_OPTIMIZATION宏包裹来禁用所有优化,或者使用CoreMiscDefines.h中定义的ship variations。这不能用于插件代码,除非您从源代码重建插件。根据它们的功能和位置,这可能或可能不适用于内联函数。调试完成后,请务必移除这些宏!
UE_DISABLE_OPTIMIZATION
void MyClass::MyFunction(int32 MyIntParameter)
{
// 我的代码
}
UE_ENABLE_OPTIMIZATION6.1 Showdebug Abilitysystem
在游戏内控制台中输入showdebug abilitysystem。此功能分为三个“页面”。所有三个页面将显示您当前拥有的GameplayTags。在控制台中输入AbilitySystem.Debug.NextCategory以在页面之间循环。
第一页显示您所有Attributes的CurrentValue:

第二页显示您身上的所有Duration(持续)和Infinite(无限) GameplayEffects,它们的堆叠数量,它们提供的GameplayTags,以及它们提供的Modifiers。

第三页显示所有已授予您的GameplayAbilities,无论其是否正在运行、是否被阻止激活,以及当前运行的AbilityTasks的状态。

要在目标之间循环(由围绕Actor的绿色矩形棱柱表示),使用PageUp键或NextDebugTarget控制台命令转到下一个目标,使用PageDown键或PreviousDebugTarget控制台命令转到上一个目标。
注意: 为了使能力系统信息根据当前选择的调试Actor更新,您需要在DefaultGame.ini中将bUseDebugTargetFromHud=true设置在AbilitySystemGlobals中,如下所示:
[/Script/GameplayAbilities.AbilitySystemGlobals]
bUseDebugTargetFromHud=true注意: 为了使showdebug abilitysystem工作,必须在GameMode中选择一个实际的HUD类。否则,命令未找到并返回“Unknown Command”。
6.2 Gameplay Debugger
GAS为Gameplay Debugger添加了功能。使用反引号(‘)键访问Gameplay Debugger。按下数字键盘上的3启用Abilities类别。类别可能会有所不同,具体取决于您拥有的插件。如果您的键盘没有数字键盘,例如笔记本电脑,您可以在项目设置中更改键绑定。
当您想查看其他Characters上的GameplayTags、GameplayEffects和GameplayAbilities时,请使用Gameplay Debugger。不幸的是,它不显示目标的Attributes的CurrentValue。它将以屏幕中心的Character为目标。您可以通过在编辑器中的World Outliner中选择它们或通过查看不同的Character并再次按下反引号(‘)来更改目标。当前检查的Character上方有最大的红色圆圈。

6.3 GAS Logging
GAS源代码包含许多在不同详细级别生成的日志语句。您很可能会看到这些作为ABILITY_LOG()语句。默认的详细级别是Display。任何更高的级别默认不会显示在控制台中。
要更改日志类别的详细级别,请在控制台中输入:
log [category] [verbosity]例如,要打开ABILITY_LOG()语句,您可以在控制台中输入:
log LogAbilitySystem VeryVerbose要将其重置为默认值,请输入:
log LogAbilitySystem Display要显示所有日志类别,请输入:
log list值得注意的GAS相关日志类别:
| 日志类别 | 默认详细级别 |
|---|---|
| LogAbilitySystem | Display |
| LogAbilitySystemComponent | Log |
| LogGameplayCueDetails | Log |
| LogGameplayCueTranslator | Display |
| LogGameplayEffectDetails | Log |
| LogGameplayEffects | Display |
| LogGameplayTags | Log |
| LogGameplayTasks | Log |
| VLogAbilitySystem | Display |
有关更多信息,请参阅Wiki on Logging。