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

버프·디버프·상태 이상을 확장 가능한 구조로 만들기

난이도심화
예상 시간155분
선수지식22강의 Stack·Immunity

23강. 버프·디버프·상태 이상을 확장 가능한 구조로 만들기

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

Stun ActorComponent, Slow Timer, Poison Tick처럼 상태마다 별도 시스템을 만들면 정화, 면역, UI와 사망 정리를 각각 다시 구현해야 합니다. 공통 상태 데이터는 재사용하되 기능별 판정까지 하나의 거대 클래스에 넣지 않습니다.

2. 학습 목표​

3. 핵심 개념​

상태 하나는 다음 계약을 가집니다.

Effect Class + Duration/Period + Stack Policy
Granted State Tag + Effect Classification Tag
Attribute Modifier 또는 Execution
Gameplay Cue Tag
Removal Tags / Immunity Tags / Death Policy

Knockback은 순간 이동 사건과 Movement 상태가 결합될 수 있어 Effect만으로 모든 움직임을 해결하지 않습니다. 서버가 힘과 대상 유효성을 판정하고 CharacterMovement 또는 Ability Task가 이동을 실행하며 Effect·Tag가 제어 상태를 나타냅니다.

4. 구현​

상태 정의 DataAsset은 클래스와 표현만 저장합니다.

CombatStatusDefinition.h
UCLASS(BlueprintType)
class GASCOMBAT_API UCombatStatusDefinition : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly)
TSubclassOf<UGameplayEffect> EffectClass;
UPROPERTY(EditDefaultsOnly)
FGameplayTag StatusTag;
UPROPERTY(EditDefaultsOnly)
FText DisplayName;
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UTexture2D> Icon;
};

함정은 Target ASC를 찾고 서버에서 GE_TrapDamage와 GE_Slow Spec을 적용합니다. Client Overlap만으로 적용하지 않으며 Knockback 방향과 세기는 서버가 Clamp합니다.

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

ASC의 Active Effect와 Granted Tag가 상태 원본이고 DataAsset은 조립 정보만 제공합니다. UI와 Cue는 원본 변화를 관찰하므로 상태 로직을 복제하지 않습니다. 함정도 같은 Effect 계약을 사용해 Player Ability와 정화·면역 규칙을 공유합니다.

6. 실패 사례와 해결​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

버프·디버프·상태 이상을 확장 가능한 구조로 만들기 미니 퀴즈

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

0 / 2
  1. 문제 1“버프·디버프·상태 이상을 확장 가능한 구조로 만들기” 구현을 설계할 때 책임과 구조를 올바르게 나눈 선택은 무엇인가요?
  2. 문제 2“버프·디버프·상태 이상을 확장 가능한 구조로 만들기” 실습 중 ‘정화가 모든 Debuff를 무조건 제거’ 상황을 발견했습니다. 본문과 일치하는 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

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

23강. 버프·디버프·상태 이상을 확장 가능한 구조로 만들기 미완료 상태