GAS에서 콤보 공격을 구현할 때 Tag를 활용한다.
GA(GameplayAbility)에는 Tag를 부여할 수 있고 TryActivateAbilitiesByTag()는 Tag를 포함하는(하위 태그 포함) 모든 GA를 활성화 시킬 시도를 합니다.
그래서 우리는 콤보스킬를 구현할 때, 같은 콤보로 구성된 스킬들의 태그는 동일한 부모의 하위 태그로 구성해주어야 한다.
ex) Attack.Combo.1, Attack.Combo.2, Attack.Combo.3 ... 함수호출할 때는 TryActivateAbilitiesByTag(Attack.Combo)
하지만 우리는 같은 콤보로 구성된 스킬들이라고 해도, 스킬을 1번 실행하면 1개의 스킬만 실행되어야 한다. 그렇기 때문에 조건을 주어서 상황에 맞는(콤보에 맞는)스킬이 1개만 실행되도록 설정해주어야 한다.
실행되어야 되는 상황 | |
Combo1 | 평상시 기본 상태 |
Combo2 | Combo1 실행된 후 |
Combo3 | Combo2 실행된 후 |
위의 사진처럼 GA에는 다양한 종류의 Tag를 설정할 수 있다.
AssertTags(Default Ability Tags) | GA의 기본 태그 |
태그 포함 어빌리티 취소 | GA가 활성화 되면, 설정된 태그가 포함 된 어빌리티를 모두 취소 |
태그 있는 능력 차단 | 해당 태그를 가지고 있는 GA를 모두 차단 |
활성화 소유 태그 | 활성화 되어 있는 동안 시전자에게 부여될 태그 |
활성화 필수 태그 | GA를 활성화 하려면 시전자에게 해당 태그가 있어아 함 |
활성화 차단 태그 | 시전자에게 해당 태그가 있으면 GA가 차단 됨 |
Combo2의 활성화 필수 태그에 After.Combo1을 설정하면 Combo2는 시전자에게 After.Combo1 태그가 있을 때만 활성화 된다.
Combo3의 활성화 필수 태그에 After.Combo2을 설정하면 Combo3는 시전자에게 After.Combo2 태그가 있을 때만 활성화 된다.
TryActivateAbilitiesByTag()함수는 인자로 전달된 Tag를 포함한 모든 GA를 활성화 시도를 한다.
Attack.Combo.1, Attack.Combo.2, Attack.Combo.3 < 3개의 스킬이 있고
TryActivateAbilitiesByTag(Attack.Combo)를 호출하면 Combo1, Combo2, Combo3개의 스킬을 활성화 시도한다.
하지만 우리는 위에서 Combo2의 활성화 필수 태그에 After.Combo1, Combo3의 활성화 필수 태그에 After.Combo2를 설정해 두었고, Player는 기본적으로 Tag를 가지고 있지 않기 때문에 Combo2와 Combo3는 실행하지 않고 Combo1 한개만 활성화 한다.
Combo1이 실행 될 때 Player에게 After.Combo1(Combo1이 실행되었다는것을 표현할 태그)를 부여한다.
이 상태에서 다시 TryActivateAbilitiesByTag(Attack.Combo)를 호출하게 되면 마찬가지로 Combo1, Combo2, Combo3를 활성화 시도를 한다.
Combo1은 (사진)GA_Combo1에서 보면 활성화 차단 태그에 Attack.Combo.1 를 설정해 두었기 때문에 활성화 하지 않는다.
Combo3의 활성화 필수 태그는 After.Combo2, 현재 Player는 After.Combo1을 가지고 있기 때문에 활성화 하지 않는다.
Combo2의 활성화 필수 태그는 After.Combo1, Combo1이 실행되면서 After.Combo1이 Player에게 부여 했기 때문에 Combo2 한개만 활성화 된다.
Combo2가 활성화 될 때 Player에게 After.Combo1을 제거하고, After.Combo2를 추가한다.
TryActivateAbilitiesByTag(Attack.Combo)를 호출하게 되면, Combo1과 Combo2는 제한되었기 때문에 Combo3만 활성화 한다.
'Unreal Project' 카테고리의 다른 글
FloatingDamage - AbilitySystemComponent (0) | 2025.04.30 |
---|---|
Dodge (0) | 2025.04.16 |
FloatingDamageWidget (0) | 2024.10.19 |
SkillCooldownSystemComponent (0) | 2024.10.19 |
GameInstance 및 캐릭터 정보 저장 (0) | 2024.09.23 |