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

비전 파편 스킬 - 4) 파편에 피격당한 적에게 피해 적용

monstro 2025. 12. 7. 23:22
728x90
반응형

- 개요

파편이 소환되면서 FX 효과만 처리하는 것이 아닌 실제 데미지를 주도록 설계한다

 

- C++ 사이드

1) AuraAbilityTypes 클래스

DamageEffectParams 구조체의 멤버변수 수정

 

DamageEffectParams 구조체에 위와 같이 멤버변수를 추가한다

각각 다음과 같다

  • 원형 범위의 피해를 주는 어빌리티인지 여부
  • 원형 범위의 내부 원의 반지름
  • 원형 범위의 외부 원의 반지름
  • 원형 범위의 원점

 

AuraGameplayEffectContext 클래스 수정 (1)

 

AuraGameplayEffectContext 클래스 수정 (2)

 

동일한 멤버변수들을 AuraGameplayEffectContext 클래스에 추가한다 

추가한 멤버변수들에 대한 Getter 함수와 Setter 함수를 추가한다

 

NetSerialize 함수 수정 (1) - 직렬화

 

NetSerialize 함수 수정 (2) - 역직렬화

 

NetSerialize 함수를 위와 같이 수정하여 원형범위의 피해를 주는 어빌리티인 경우에만 

추가한 멤버변수들을 직렬화하고 역직렬화할 수 있도록 설정한다

 

2) AuraDamageGameplayAbility 클래스

 

MakeDamageEffectParamsFromClassDefaults 함수에 위와 같이 2개의 인자를 추가한다

 

 

원형범위의 피해를 주는 스킬 어빌리티에 필요한 4개의 멤버변수를 추가한다

 

 

MakeDamageEffectParamsFromClassDefaults 함수를 위와 같이 수정하여

원형 범위의 피해를 주는 어빌리티라면 DamageEffectParams에서 필요한 요소들을 설정한다

 

3) AuraAbilitySystemLibrary 클래스

 

원형범위의 피해를 주는 스킬 어빌리티에 필요한 요소들에 대한 Getter 함수와 Setter 함수를 추가한다

 

추가한 함수들 (1)

 

추가한 함수들 (2)

 

추가한 함수들은 위와 같이 AuraGameplayEffectContext에 접근하여 값을 가져오거설정하도록 구성한다

 

4) CombatInterface 클래스

 

C++에서만 사용가능하며 1 : 多 관계로 브로드캐스트하는 OnDamageSignature 델리게이트를 추가한다

해당 델리게이트는 데미지의 양을 인자로 받으며 피해를 받게 되면 브로드캐스트한다

 

 

추가한 델리게이트를 반환하는 순수 가상 함수를 추가한다

 

5) AuraCharacterBase 클래스

 

CombatInterface에 추가한 델리게이트를 멤버변수로 추가하고

새롭게 생성한 순수 가상 함수를 오버라이드한다

 

 

GetOnDamageSignature 함수의 로직은 위와 같이 추가한 델리게이트를 반환하도록 구성한다

 

 

 

TakeDamage 함수를 위와 같이 새롭게 추가한다

해당 함수에서는 부모 버전의 함수를 호출하여 입은 피해를 DamageTaken 변수에 저장한다

저장한 DamageTaken 변수를 OnDamageDelegate 델리게이트에 인자로 넣어 브로드캐스트하고 반환한다 

 

6) ExecCalc_Damage 클래스

Execute 함수 수정

 

Execute 함수에 위와 같이 로직을 추가한다

우선, 데미지 타입의 값을 가져오지 못했다건너뛰는 로직을 추가한다

이후 적용할 데미지의 GE원형 범위의 피해를 주는지 판단하고 다음의 로직을 진행한다

  • GE를 적용할 Target으로부터 OnDamageDelegate를 가져오고 람다 함수를 바인드
    • 브로드캐스트되면 DamageTypeValue의 값 DamageAmount의 값으로 설정
  • ApplyRadialDamageWithFalloff 함수를 호출하여 지정한 범위광역 피해를 적용

 

- 블루프린트 사이드

1) GA_ArcaneShards 블루프린트

1 - 1) StorePlayersToDamage 함수

 

StorePlayersToDamage 함수의 로직은 위와 같다

GetLivePlayersWithinRadius 함수를 호출하여

SharedSpawnLocation을 기준으로 RadiablDamageOuterRadius만큼의 Trace를 진행하고

결과값을 PlayerstoDamage 변수에 저장한다

 

1 - 2) RadialDamageToPlayer 함수

 

RadialDamageToPlayer 함수의 로직은 위와 같다

Taget에게 적용할 원형 범위의 피해를 지닌 DamageEffectParams를 생성하고

권한을 확인하여 데미지 GameplayEffect를 적용한다

 

1 - 3) StoreShardSpawnLocation 함수

 

StoreShardSpawnLocation 함수의 로직은 위와 같다

GroundPoints에 저장된 SceneComponent들의 월드위치를 가져와 ShardSpawnLocation 변수로 설정한다

 

1 - 4) EventGraph 

ActivateAbility 이벤트의 6번째 로직 수정

 

ActivateAbility 이벤트의 6번째 로직을 위와 같이 수정하여

비전 파편을 소환하고 비전 파편에 피격당한 적들에게 데미지를 적용한다

 

- 최종 실행 결과

 

728x90
반응형