기간형 게임플레이 이펙트
- Instant 탕비이 아닌 게임플레이 이펙트를 의미한다.
- Duration : 지정한 시간 동안 동작하는 게임플레이 이펙트
- Infinite : 명시적으로 종료하지 않으면 계속 동작하는 게임플레이 이펙트 - 기간형 게임플레이 이펙트는 유효 기간동안 태그와 같은 상태를 가질 수 있다.
- 기간형 게임플레이 이펙트는 중첩(Stack)이 가능하도록 설정이 가능하다.
- 모디파이어를 설정하지 않아도 다양하게 활용 가능하다.
- 인스턴스는 Base값을 변경하지만 기간형은 Current값을 변경하고 원래대로 Current값을 Base로 돌려놓는다.
- 하지만 Period를 사용하면 Base값을 변경 가능하다 -> GAS글 중 상자 구현에 설명이 되어있음.
- 이 기간형 게임플레이 이펙트를 활용하여 다양한 스킬, 버프 효과를 코딩 없이 구현이 가능하다.
기간형 게임플레이 이펙트로 무적 구현

GameplayEffect를 상속받아 BP를 만들고 다음과 같이 세팅한다.
Duration Policy를 Has Durtaion으로 하고
Duration Magnitude에 Scalable Float Magnitude는 몇초 동안 이펙트가 동작하는지이다.
Components에 Grant Tags to Target Actor는 Target Actor에 해당 Add to Inherited된 Tag를 부착시켜주는 것이다.
이번 예시에선 Character.State.Invinsible Tag를 부착하여 진행한다.

GA_Invinsible을 위와 같이 간단히 제작하고

NPC에서 3초뒤에 해당 GA_Invinsible을 발동시킨다.
bool UABCharacterAttributeSet::PreGameplayEffectExecute(FGameplayEffectModCallbackData& Data)
{
if (!Super::PreGameplayEffectExecute(Data))
{
return false;
}
//데미지와 관련된 어트리뷰트가 들어왔다면
if (Data.EvaluatedData.Attribute == GetDamageAttribute())
{
//데지미가 0 이상이고
if (Data.EvaluatedData.Magnitude > 0.0f)
{
//어트리뷰트 변경을 적용할 Target이 무적 Tag를 가지고 있다면
if (Data.Target.HasMatchingGameplayTag(ABTAG_CHARACTER_INVINSIBLE))
{
Data.EvaluatedData.Magnitude = 0.0f;
return false;
}
}
}
return true;
}
데미지 관련한 로직이 있는 UABCharacterAttributeSet에서
게임플레이 이펙트를 적용하기 전에 동작하는 PreGameplayEffectExecute에서
해당 어트리뷰트 변경을 적용할 대상이 무적 Tag를 들고 있다면 데미지의 크기를 0.0으로 변경하고 이후 실행하지 마라는 로직이다.
이렇게 제작하면 3초동안 NPC를 무적으로 만들 수 있다.
그럼 다른 예시로
Modifier도 사용하고 Stack도 사용하는 예시를 해보자.

Attack범위를 늘려줄 GE_AttackHitBuff이다.
Duration Policy를 HasDuration으로 설정하고
Scalable Float Magnitude를 1.0으로 설정하여 1초간 지속되도록 한다.
Modifiers에 AttackRadius의 값을 15를 늘리도록 설정한다.

Stacking에는 최대 4번이 중첩될 수 있도록 하고
적용 대상은 Aggregate by Source로 자기 자신에게 적용하는 것으로 한다.
이전에 만들었던 GA_AttackHitCheck에를 수정해서
//헤더
UPROPERTY(EditAnywhere, Category = "GAS")
TSubclassOf<UGameplayEffect> AttackBuffEffect;
--------------------
//cpp
void UABGA_AttackHitCheck::OnTraceResultCallback(const FGameplayAbilityTargetDataHandle& TargetDataHandle)
{
...
FGameplayEffectSpecHandle BuffEffectSpecHandle = MakeOutgoingGameplayEffectSpec(AttackBuffEffect);
if (BuffEffectSpecHandle.IsValid())
{
ApplyGameplayEffectSpecToOwner(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, BuffEffectSpecHandle);
}
...
}
다음과 같이 추가하여 작성해주고
AttackHitCheck를 사용하는 Blueprint에 알맞은 AttackBuffEffect를 넣어주고 실행한다.

결과를 보면 Attack Radius값이 늘어나서 110.00인 것을 확인할 수 있고
옆에 Base 값은 50으로 GE에 의해 변경되지 않는다는걸 확인할 수 있다.
이 Base가 변동되지 않는 것이 Instant와 다른 기간형 게임플리에 이펙트의 특징이다.
'Unreal 게임 개발 > Unreal 강의 개인 정리' 카테고리의 다른 글
| 아이템 상자 제작 - GAS (0) | 2025.08.27 |
|---|---|
| 게임플레이 큐 & 공격 파티클 재생 - GAS (2) | 2025.08.27 |
| Attribute Set을 활용한 사망 처리 - GAS (0) | 2025.08.25 |
| Attribute Set UI로 표시 - GAS (0) | 2025.08.25 |
| EffectContext & Spec Handle / 캐릭터 레벨 스탯 변화 - GAS (0) | 2025.08.25 |