6. 游戏技能系统的调试 - Debugging GAS

在调试GAS相关的问题时,你经常会想知道:

  • “我的属性们的值是多少?”
  • “我身上有哪些gameplay tags?”
  • “当前我有哪些gameplay effects?”
  • “我赋予了哪些技能,其中哪些还在运行,而哪些被阻止激活?”

对于这些问题,GAS带有两项运行时的技术来应对——showdebug abilitysystem以及 GameplayDebugger

**提示:**UE4会去优化C++代码,这会使某些函数难以进行调试。当你深入追踪你的代码时你就有概率会遇到这种情况。如果设置Visual Studio解决方案的配置为DebugGame Editor仍然无法让你尽情对代码进行调试,你可以通过PRAGMA_DISABLE_OPTIMIZATION_ACTUALPRAGMA_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页的内容。

第一页显示你的AttributesCurrentValue
First Page of showdebug abilitysystem

第二页显示了你身上所有的DurationInfiniteGameplayEffects,其具体的叠加的数量,他们赋予了哪些GameplayTags,以及他们赋予了哪些Modifiers
Second Page of showdebug abilitysystem

第三页显示了所有的赋予给你的GameplayAbilities,他们当前的运行状态,他们是否被阻止进行激活,以及当前运行的AbilityTasks的状态。
Third Page of showdebug abilitysystem

当使用PageUpPageDown进行目标间的切换时,当前页面只会显示本地控制的CharacterASC的数据。而shi用AbilitySystem.Debug.NextTargetAbilitySystem.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身上的GameplayTagsGameplayEffects,以及GameplayAbilities式,就可以使用Gameplay Debugger。不过可惜的是,它并不会显示目标的AttributesCurrentValue。它会以你屏幕正中的Character为目标。有两种方式可以更改选定的目标:在编辑器的World Outliner中选定你的目标,或者看向其他的Character然后按下单引号(‘)。当前选中的目标角色会在其上方有一个大大的红色圆圈。

Gameplay Debugger

6.3 游戏技能系统的日志 - GAS Logging

GAS的源码包含很多的日志语句,分别应对各种级别(错误,警告,日志)。你应该会经常在ABILITY_LOG()中见到这些语句。默认的日志级别是Display。其他高于这个级别的日志则在默认情况下不会在控制台进行显示。

要修改显示的日志等级,可以在你的控制台中键入:

log [category] [verbosity]

例如,为了激活ABILITY_LOG()语句,你可以在控制台键入:

log LogAbilitySystem VeryVerbose

重置回默认,则键入:

log LogAbilitySystem Display

要显示所有级别的日志,键入:

log list

GAS相关的日志类别:

日志类别默认显示等级
LogAbilitySystemDisplay
LogAbilitySystemComponentLog
LogGameplayCueDetailsLog
LogGameplayCueTranslatorDisplay
LogGameplayEffectDetailsLog
LogGameplayEffectsDisplay
LogGameplayTagsLog
LogGameplayTasksLog
VLogAbilitySystemDisplay

更多信息参见Wiki on Logging

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值