Modifier, Stacking, Granted Tag, Immunity 설계
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 차단을 관찰합니다.
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. 핵심 요약
Modifier, Stacking, Granted Tag, Immunity 설계 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.