인프런 [이득우의 언리얼 프로그래밍 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 추가하기
결과 화면
이전 시간과 같은 결과가 나온다.
'UnrealEngine5 > 공부' 카테고리의 다른 글
[UE5/GAS] 데미지 전달에 GE 활용하기 (2) MetaAttribute와 CurveTable 활용하기 (1) | 2025.06.02 |
---|---|
[UE5/GAS] Character Attribute로 Damage 전달하기 (0) | 2025.06.01 |
[UE5/GAS] AnimNotify와 Trigger Tag로 공격 판정하기 (0) | 2025.05.30 |
[UE5/GAS] 상태Tag와 AT를 활용한 GA, AT 규칙 (0) | 2025.05.29 |
[UE5/GAS] GAS와 CharacterPlayer, GA와 AbilityTask (0) | 2025.05.28 |