본문으로 건너뛰기
Unreal Engine GAS(Gameplay Ability System) 심화LESSON 22

Modifier, Stacking, Granted Tag, Immunity 설계

난이도심화
예상 시간165분
선수지식21강의 Effect 수명

22강. Modifier, Stacking, Granted Tag, Immunity 설계

1. 이번 강의에서 해결할 문제​

동일 Slow가 여러 번 적용될 때 속도가 무한히 감소하거나, Stack 하나를 제거했는데 전체 Stun이 해제될 수 있습니다. Immunity를 무적과 동일하게 취급하면 Buff까지 차단하는 지나치게 넓은 규칙이 됩니다.

2. 학습 목표​

3. 핵심 개념​

Stack은 같은 Effect Spec이 반복 적용될 때 수와 Duration을 어떻게 갱신할지 정합니다. Source별 Stack은 여러 공격자의 독을 따로 유지하고, Target별 Stack은 출처와 무관한 하나의 최대 Stack을 만듭니다. Immunity는 특정 Effect 적용 자체를 거절하며 Invulnerable Tag만으로 모든 Effect를 차단하는 것과 다릅니다.

4. 구현​

적용 결과와 Immunity 차단을 관찰합니다.

CombatEffectObserver.cpp
void UCombatEffectObserver::Bind(UAbilitySystemComponent* ASC)
{
EffectAppliedHandle = ASC->OnGameplayEffectAppliedDelegateToSelf.AddUObject(
this, &ThisClass::HandleEffectApplied);
ImmunityHandle = ASC->OnImmunityBlockGameplayEffectDelegate.AddUObject(
this, &ThisClass::HandleEffectBlocked);
}

void UCombatEffectObserver::HandleEffectBlocked(
const FGameplayEffectSpec& BlockedSpec,
const FActiveGameplayEffect* ImmunityEffect)
{
UE_LOG(LogGASCombat, Display, TEXT("Effect blocked: %s"),
*GetNameSafe(BlockedSpec.Def));
}

GE_Slow는 Duration, 최대 Stack 3, Target 집계, Refresh Duration 정책을 예로 사용합니다. GE_StunImmunity는 Effect Tag Requirement 또는 Immunity Component로 Stun 분류만 막습니다. 세부 Editor 필드 이름은 UE5 버전을 확인합니다.

5. 코드가 동작하는 이유​

ASC가 Stack Count와 Duration을 Active Effect 한 항목에 집계하고 Granted Tag Count를 함께 관리합니다. Immunity Delegate는 적용 거절을 UI·로그에 알리지만 게임 상태 자체는 적용된 Immunity Effect와 Tag가 소유합니다.

6. 실패 사례와 해결​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

Modifier, Stacking, Granted Tag, Immunity 설계 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“Modifier, Stacking, Granted Tag, Immunity 설계” 구현을 설계할 때 책임과 구조를 올바르게 나눈 선택은 무엇인가요?
  2. 문제 2‘차단 표현만 보여 줌’ 실수를 판단할 때 “Modifier, Stacking, Granted Tag, Immunity 설계” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

22강. Modifier, Stacking, Granted Tag, Immunity 설계 미완료 상태