Как определить, почему GameplayAbility не удалось активировать - PullRequest
0 голосов
/ 01 ноября 2018

Чтобы получить уведомление о причине, по которой GameplayAbility не удалось активировать, можно назначить функцию делегату UAbilitySystemComponent::AbilityFailedCallbacks(). Содержит параметр тега. Этот параметр можно использовать для определения причины сбоя UAbilitySystemComponent::TryActivateAbility(), будь то:

  • способность находится на время восстановления
  • стоимость не может быть предоставлена ​​
  • заблокирован другими способностями
  • Компонент AbilitySystem отсутствует, требуется Теги игрового процесса

Однако при тестировании тег в делегате остается пустым (или делегат даже не запускается).

  1. Откуда этот тег?
  2. Как установить этот тег?

1 Ответ

0 голосов
/ 01 ноября 2018

(1) Эти теги являются частью UAbilitySystemGlobals. У него есть теги для:

  • Актер мёртв ActivateFailIsDeadTag
  • на перезарядке ActivateFailCooldownTag
  • недостаточные расходы ActivateFailCostTag
  • заблокирован другими способностями ActivateFailTagsBlockedTag
  • отсутствуют обязательные теги ActivateFailTagsMissingTag
  • неверные настройки сети ActivateFailNetworkingTag

(2) Они могут быть установлены (пример стоимости)

  1. Установите теги в DefaultGame.ini, используя соответствующий FName (пример для затрат):

    [/Script/GameplayAbilities.AbilitySystemGlobals]
    ActivateFailCostName=My.Test.Tag
    
  2. Убедитесь, что GameplayTag существует, например, в DefaultGameplayTags.ini

    +GameplayTagList=(Tag="My.Test.Tag",DevComment="")
    
  3. Инициализируйте эти теги, вызвав UAbilitySystemGlobals::Get().InitGlobalData(), например, в конструкторе вашего UGameInstance подкласса.

Как это работает

Пример затрат:

in UGameplayAbility::CanActivateAbility() -> UGameplayAbility::CheckCost():

  • UAbilitySystemGlobals::ActivateFailCostTag применяется к дополнительному параметру OptionalRelevantTags, если расходы не могут быть предоставлены
  • этот тег используется в UAbilitySystemComponent::NotifyAbilityFailed() который
  • увольняет делегата UAbilitySystemComponent::AbilityFailedCallbacks

Это похоже на другие случаи, упомянутые выше (время восстановления, блок, ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...