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_OPTIMIZATION
6.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。