UnrealEngine5/공부

[UE5/GAS] 데미지 전달에 GE 활용하기 (1)

왹져박사 2025. 6. 2. 02:12

인프런 [이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템] 강의 공부 노트

강의를 들으며 개념 정리 후, 다른 프로젝트에 실습하고 있습니다. 


지난번에 const_cast로 임의적으로 속성을 변경하여 값을 변경하던 과정을 GE를 사용하여 간접적으로 변경할 것이다.

 

GE (GameplayEffect)

여기서 Effect는 영향의 의미로, 게임에 영향을 주는 객체를 말한다.

→ 게임에 영향? 주로 데이터 변경을 의미 → GE는 Attribute와 함께 동작

 

GAS에서 가장 많은 기능을 제공하는 클래스이다.

 

타입

  • Instant : Attribute에 즉각 적용, 한 프레임에 실행
  • Duration : 지정한 시간 동안 동작
  • Infinite : 명시적 종료 전까지 계속 동작

장점 : 별도의 코딩이 없어도 다양하고 복잡한 작업의 수행 가능.

 

 

ModifierInfo

Attribute 변경 방법을 지정한 설정.

적용할 Attribute 지정 후, 적용 방식을 설정(더하기, 곱하기, 나누기, 덮어쓰기)

 

계산 방법

  • ScalableFloat : 실수 (데이터테이블과 연동 가능)
  • AttributeBased : 특정 Attribute에 기반
  • CustomCalculationClass : 계산을 담당하는 전용 클래스 활용
  • SetByCaller : 데이터 태그를 이용한 데이터 전달

Modifier 없이 계산 로직을 만드는 것도 가능하다!

→ GameplayEffectExecutionCalcuration

 


1. 공격 데미지를 위한 GE 생성하기 (Blueprint)

1) ScalableFloat

 

2) SetByCaller 

SetByCaller 방법은 데이터를 전송할 때 사용하는 태그가 필요하다.

이는 GE를 호출한 곳에서 지정한 값을 적용하고,

호출된 곳에서는 받은 값을 적용.

 

2-1) Damage Tag 추가

 

 

2-2) 생성했던 GameplayTag.h에 Tag 매크로 추가하기

#define VSTAG_DATA_DAMAGE FGameplayTag::RequestGameplayTag(FName("Data.Damage"))

 

2-3) 공격 체크 GA에 추가하기

기존 Source ASC와 Attribute 가져오는 부분 주석 해제.

void UVSGA_SkillAttackHitCheck::OnTraceResultCallback(const FGameplayAbilityTargetDataHandle& TargetDataHandle)
{
		//...
		UAbilitySystemComponent* SourceASC = GetAbilitySystemComponentFromActorInfo_Checked();
		const UVSCharacterAttributeSet* SourceAttribute = SourceASC->GetSet<UVSCharacterAttributeSet>();

		FGameplayEffectSpecHandle EffectSpecHandle = MakeOutgoingGameplayEffectSpec(AttackDamageEffect);
		if (EffectSpecHandle.IsValid())
		{
			EffectSpecHandle.Data->SetSetByCallerMagnitude(VSTAG_DATA_DAMAGE, -SourceAttribute->GetAttackPower());

			// Effect 발동 명령.
			ApplyGameplayEffectSpecToTarget(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, EffectSpecHandle, TargetDataHandle);
		}
	}

 

결과 화면

 

3) CustomCalculationClass

3-1) GameplayModeMagnitudeCalculation Blueprint 생성

 

3-2) CalculateBaseMagniture 함수 override, 값 설정

 

3-3) GE에 적용

 

결과 화면

 

3) AttributeBased

지정한 Attribute 값을 기반으로 곱, 이전 값에 덧셈, 이후 값에 덧셈 등 기능을 제공하고 있다. 

 

결과 화면

모든 방법이 같은 결과를 도출하는 것을 볼 수 있다. 


2. GA에 GE 추가하기

 


결과 화면

이전 시간과 같은 결과가 나온다.