如何确定GameplayAbility无法激活的原因

时间:2018-11-01 20:08:03

标签: unreal-engine4 unreal-gameplay-ability-system

要获取有关GameplayAbility激活失败的原因的通知,可以将功能分配给委托人public void FiltarBusqueda(String filtro) { for (int r = 0; r < mTableLayout.getChildCount(); r++) { TableRow trow = (TableRow) mTableLayout.getChildAt(r); boolean hasMatch = false; for (int c = 0; c <= trow.getChildCount(); c++) { String text = ((TextView) trow.getChildAt(c)).getText().toString(); hasMatch = text.equals(filtro); //when comparing Strings, use `equals()` not `==` if (hasMatch) break; } if (!hasMatch) { mTableLayout.removeRow(trow); } } } 。它包含一个标记参数。此参数可用于确定UAbilitySystemComponent::AbilityFailedCallbacks()失败的原因,可以是

  • 该技能在冷却时间
  • 无法支付费用
  • 被其他能力
  • 阻止
  • AbilitySystemComponent缺少必需的 GameplayTags

但是,在测试时,委托中的标签为空(或者甚至没有触发委托)。

  1. 该标签来自哪里?
  2. 如何设置该标签?

1 个答案:

答案 0 :(得分:0)

(1)这些标签是UAbilitySystemComponent::TryActivateAbility()的一部分。它具有以下标签:

  • 演员死了UAbilitySystemGlobals
  • 冷却时间ActivateFailIsDeadTag
  • 费用不足ActivateFailCooldownTag
  • 被其他能力ActivateFailCostTag
  • 阻止
  • 缺少必需的标签ActivateFailTagsBlockedTag
  • 无效的网络设置ActivateFailTagsMissingTag

(2)可以通过(例如费用)进行设置

  1. 使用相应的ActivateFailNetworkingTag(费用示例)在DefaultGame.ini中设置标签:

    FName
  2. 请确保GameplayTag存在,例如在[/Script/GameplayAbilities.AbilitySystemGlobals] ActivateFailCostName=My.Test.Tag

    DefaultGameplayTags.ini
  3. 通过调用+GameplayTagList=(Tag="My.Test.Tag",DevComment="") 来初始化这些标签,例如在您的UAbilitySystemGlobals::Get().InitGlobalData()子类的构造函数中。

这是怎么工作的

费用示例:

UGameInstance-> UGameplayAbility::CanActivateAbility()中:

    如果无法负担费用,
  • UGameplayAbility::CheckCost()将应用于可选的out参数UAbilitySystemGlobals::ActivateFailCostTag
  • 此标签用于OptionalRelevantTags,其中
  • 解雇代表UAbilitySystemComponent::NotifyAbilityFailed()

这与上述其他情况(冷却,阻塞,…)相似。