- 개요
이전에 만든 ExecCalc_Damage 클래스를 사용하여
GameplayEffect에서 IncomingDamage 어트리뷰트의 값을 결정한다
연산에 필요한 어트리뷰트의 구성은 다음과 같다
- GE를 적용하는 SourceActor
- ArmorPenetration 어트리뷰트의 값을 가져와 Target의 Armor 어트리뷰트를 일부 무시
- 커브 테이블 프로퍼티를 사용하여 계수를 설정하여 값을 조정
- CriticalHitChance 어트리뷰트의 값을 가져와 확률적으로 크리티컬 피해를 줌
- CriticalHitDamage 어트리뷰트의 값을 가져와 크리티컬 피해의 값을 설정
- ArmorPenetration 어트리뷰트의 값을 가져와 Target의 Armor 어트리뷰트를 일부 무시
- GE가 적용되는 TargetActor
- Armor 어트리뷰트의 값을 가져와 입는 피해를 일부 감소
- 커브 테이블 프로퍼티를 사용하여 계수를 설정하여 값을 조정
- BlockChance 어트리뷰트의 값을 가져와 확률적으로 입는 피해 절반으로 감소
- CriticalHitResistance 어트리뷰트의 값을 가져와 크리티컬 피해 일부 감소
- 커브 테이블 프로퍼티를 사용하여 계수를 설정하여 값을 조정
- Armor 어트리뷰트의 값을 가져와 입는 피해를 일부 감소
1) CharacterClassInfo 클래스

CurveTable 멤버변수인 DamageCalculationCoefficients를 추가하여
데미지 연산에 사용할 레벨에 따라 다른 값으로 설정되는 계수를 설정한다
2) AuraAbilitySystemLibrary 클래스

이전에 작성한 GiveStartupAbilites 함수에서 GetCharacterClassInfo 함수를 호출하도록 수정한다
따라서 불필요한 로직을 생략할 수 있다
3) ExecCalc_Damage 클래스

래퍼 클래스로 사용하는 AuraDamageStatics 구조체에서 어트리뷰트를 더 추가하여
캡쳐할 어트리뷰트를 명시하고, 캡쳐를 진행한다

UExecCalc_Damage 클래스의 생성자에서
RelevantAttributesToCapture 리스트에 캡쳐한 어트리뷰트를 추가한다
추가된 어트리뷰트의 Definition은 수정하는 연산과 관련지어 사용한다

Execute 함수의 첫 번째 로직은 위와 같다
GameplayEffect에 대한 SourceActor의 정보와 TargetActor의 정보를 설정한다

두 번째 로직은 위와 같다
SetByCaller 연산을 사용하여 Damage 태그에 해당하는 값을 가져와
타겟의 BlockChange / 타겟의 Armor / 소스의 ArmorPenetration에 따라 Damage의 값을 설정한다

마지막 로직은 위와 같다
소스의 CriticalHitChance / Target의 CritiacalHitResistance / 소스의 CriticalHitDamage에 따라
최종 데미지를 계산한다
4) 언리얼 에디터

GE_Damage 블루 프린트에서 Executions - Calculation Class를 위와 같이 설정한다

DA_CharacterClassInfo에서 데미지 연산에 사용할 계수를 설정하기 위한 커브 테이블을 위와 같이 설정한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 데미지 처리 심화 - 2) NetSerialize 함수 오버라이드 & 사용자 정의 GEContext에 대한 복사 연산 허용 (0) | 2025.09.12 |
|---|---|
| 데미지 처리 심화 - 1) GameplayEffectContext의 사용과 사용자 정의 GEContext (0) | 2025.09.12 |
| 데미지 처리 - 4) ExecutionCalculation 클래스 적용 (0) | 2025.08.28 |
| 데미지 처리 - 3) 입은 데미지의 시각화 + 죽음 처리 (0) | 2025.08.28 |
| 데미지 처리 - 2) 피격 어빌리티를 통한 피격 애니메이션 재생 (0) | 2025.08.23 |