- 개요
AttributeSet에 데미지만을 처리하기 위한 Attribute를 추가한다
데미지를 주는 GameplayEffect는 SetByCaller 방식으로 동작하여
Tag와 연결된 Value의 값을 가져와 데미지만을 처리하는 Attribute의 값을 설정하여 Target에게 적용한다
- 리팩토링 : AuraAbilitySystemLibrary 클래스

InitializeDefaultAttributes 함수의 로직을 일부 분리하여 ApplyGameplayEffectToSelf 함수에서 처리한다

ApplyGameplayEffectToSelf 함수의 로직은 위와 같다
인자로 받은 GameplayEffect로부터 GameplayEffectSpecHandle을 생성하여 AvatarActor 자신에게 적용한다

InitializeDefaultAttributes 함수의 로직을 위와 같이 수정하였다
PrimaryAttributes -> SecondaryAttributes -> VitalAttributes 순서로 GameplayEffect를 적용하되,
추가한 ApplyGameplayEffectToSelf 함수를 사용하여 적용한다
1) AuraAttributeSet 클래스

데미지만을 처리하기 위한 IncomingDamage 어트리뷰트를 추가한다
해당 어트리뷰트는 Replication할 필요 없으므로 ReplicatedUsing 속성을 생략한다
또 해당 어트리뷰트에 접근하기 위한 ATTRIBUTE_ACCESSORS 매크로를 정의하였다

InComingDamage 어트리뷰트를 연산하기 위해 호출할 HandleIncomingDamage 함수를 추가한다

PostGameplayEffectExecute 함수에 로직을 추가한다
InComingDamage 어트리뷰트의 연산에 대해 HandleIncomingDamage 함수를 호출한다

HandleIncomingDamage 함수의 로직은 위와 같다
Health 어트리뷰트의 값을 InComingDamage 어트리뷰트의 값만큼 감소시킨다
2) AuraGameplayTags 구조체

GameplayEffect의 SetByCaller 방식에서 Attribute의 값과 연결될 Damage 태그를 추가한다

InitializeNativeGameplayTags 함수에 위의 로직을 추가한다
해당 로직을 통해 Damage 태그를 설정하여 실제로 추가한다
3) AuraGameplayAbility 클래스

Damage 멤버 변수를 추가한다
해당 멤버 변수는 ScalableFloat로서, Curve Table로 값을 선형적으로 설정할 수 있다
이를 사용하여 어빌리티로 생성되는 투사체에 부여하는 GameplayEffect의 Level을 설정할 수 있다
4) AuraProjectileSpell 클래스

SpawnProjectile 함수에 위의 로직을 추가한다
- GameplayAbility로부터 Level을 가져와 GameplayEffect에 적용할 레벨을 설정
- SetByCaller 방식을 사용하여 GameplayTag에 연결된 값을 가져와 GameplayEffect의 적용값을 설정
5) 언리얼 에디터

GA_FireBolt 블루 프린트에 위와 같이 Damage의 값을 설정할 Curve Table을 추가하고,
해당 Curve Table에서 사용할 Curve를 지정한다

투사체에 부여하는 GE_Damage 블루 프린트의 Modifier Magnitude를 Set By Caller로 설정하고
값을 불러올 GameplayTag를 위와 같이 설정한다
- 최종 실행 결과


의도한 대로 10의 데미지로 설정되는 것을 확인할 수 있다
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 데미지 처리 - 3) 입은 데미지의 시각화 + 죽음 처리 (0) | 2025.08.28 |
|---|---|
| 데미지 처리 - 2) 피격 어빌리티를 통한 피격 애니메이션 재생 (0) | 2025.08.23 |
| RPG 직업군 - 최종) RPG 직업군 생성 및 AttributeSet 설정 (0) | 2025.08.21 |
| AbilityTasks - 최종) 투사체에 GameplayEffect 적용 (0) | 2025.08.18 |
| AbilityTasks - 4) 투사체 충돌 처리 (0) | 2025.08.18 |