在调试GAS相关的问题时,你经常会想知道:
- “我的属性们的值是多少?”
- “我身上有哪些gameplay tags?”
- “当前我有哪些gameplay effects?”
- “我赋予了哪些技能,其中哪些还在运行,而哪些被阻止激活?”
对于这些问题,GAS带有两项运行时的技术来应对——showdebug abilitysystem
以及 GameplayDebugger
。
**提示:**UE4会去优化C++代码,这会使某些函数难以进行调试。当你深入追踪你的代码时你就有概率会遇到这种情况。如果设置Visual Studio解决方案的配置为DebugGame Editor
仍然无法让你尽情对代码进行调试,你可以通过PRAGMA_DISABLE_OPTIMIZATION_ACTUAL
和PRAGMA_ENABLE_OPTIMIZATION_ACTUAL
宏来对特定方法的优化进行限制。这个方式不能对插件代码使用,除非你从源代码对插件进行构建。对于内联函数可能会也可能不会起作用,具体取决于其实际的功能和位置。无比在调试完成后移除这些宏代码。
PRAGMA_DISABLE_OPTIMIZATION_ACTUAL
void MyClass::MyFunction(int32 MyIntParameter)
{
// My code
}
PRAGMA_ENABLE_OPTIMIZATION_ACTUAL
6.1 showdebug abilitysystem
在游戏控制台键入showdebug abilitysystem
即可实现。这项特性一共分为了3页。每页上都会显示你当前拥有的GameplayTags
。键入AbilitySystem.Debug.NextCategory
可以按顺序查看3页的内容。
第一页显示你的Attributes
的CurrentValue
:
第二页显示了你身上所有的Duration
和Infinite
的GameplayEffects
,其具体的叠加的数量,他们赋予了哪些GameplayTags
,以及他们赋予了哪些Modifiers
。
第三页显示了所有的赋予给你的GameplayAbilities
,他们当前的运行状态,他们是否被阻止进行激活,以及当前运行的AbilityTasks
的状态。
当使用PageUp
和PageDown
进行目标间的切换时,当前页面只会显示本地控制的Character
的ASC
的数据。而shi用AbilitySystem.Debug.NextTarget
和AbilitySystem.Debug.PrevTarget
将会切换显示到对应目标的ASCs
的数据,但是可惜的是,绿色的长方体选中框不会随着调试信息的变化而改变,所以可能在定位到底是哪一个ASC
时会有些麻烦。这个bug也已经提交https://issues.unrealengine.com/issue/UE-90437。
**注意:**为使showdebug abilitysystem
正常工作,需要在GameMode
里选择一个真正的HUD。负责命令会丢失,并且返回”Unknown Command“。
6.2 游戏调试器 - Gameplay Debugger
GAS为Gameplay Debugger也提供了一些功能选项。可以通过单引号(')访问Gameplay Debugger
。按数字键盘上的3可以激活Abilities category
。这个分类根据你的插件可能也会有所不同。如果你的键盘是那种没有小键盘的笔记本电脑,那么你可以在项目设置了修改响应的按键绑定。
当你希望看到别的Characters
身上的GameplayTags
,GameplayEffects
,以及GameplayAbilities
式,就可以使用Gameplay Debugger
。不过可惜的是,它并不会显示目标的Attributes
的CurrentValue
。它会以你屏幕正中的Character
为目标。有两种方式可以更改选定的目标:在编辑器的World Outliner
中选定你的目标,或者看向其他的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。