언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

데미지 처리 - 1) SetByCaller 방식을 사용한 Tag에 따른 데미지 값 설정

monstro 2025. 8. 22. 17:35
728x90
반응형

- 개요

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로 값을 선형적으로 설정할 수 있다

이를 사용하여 어빌리티로 생성되는 투사체부여하는 GameplayEffectLevel을 설정할 수 있다

 

4) AuraProjectileSpell 클래스

 

SpawnProjectile 함수에 위의 로직을 추가한다

  • GameplayAbility로부터 Level을 가져와 GameplayEffect적용할 레벨을 설정
  • SetByCaller 방식을 사용하여 GameplayTag에 연결된 값을 가져와 GameplayEffect의 적용값을 설정

 

5) 언리얼 에디터

 

GA_FireBolt 블루 프린트에 위와 같이 Damage의 값을 설정할 Curve Table을 추가하고,

해당 Curve Table에서 사용할 Curve를 지정한다

 

 

투사체에 부여하는 GE_Damage 블루 프린트의 Modifier MagnitudeSet By Caller로 설정하고

값을 불러올 GameplayTag를 위와 같이 설정한다

 

- 최종 실행 결과

 

 

의도한 대로 10의 데미지로 설정되는 것을 확인할 수 있다

728x90
반응형