Using external data
You cannot really store any data inside a Gameplay Ability once its granted to get it back when its executed because depending on your execution policy a new instance will be created.
See Tranek Docs: Passing Data to Abilities To activate a GA by event see this section
Activation
Here we will follow the path of UAbilitySystemComponent::TryActivateAbility
to see when we check for the requirements.
UAbilitySystemComponent::TryActivateAbility
calls UAbilitySystemComponent::InternalTryActivateAbility
which calls UGameplayAbility::CanActivateAbility
. This function will run a lof of checks including UGameplayAbility::DoesAbilitySatisfyTagRequirements
which calls the CheckForRequired
and CheckForBlocked
lambdas.