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

데미지 처리 - 최종) 능력치를 고려한 데미지 처리

monstro 2025. 8. 30. 01:05
728x90
반응형

- 개요

이전에 만든 ExecCalc_Damage 클래스를 사용하여

GameplayEffect에서 IncomingDamage 어트리뷰트을 결정한다

연산에 필요한 어트리뷰트의 구성은 다음과 같다

  • GE를 적용하는 SourceActor
    • ArmorPenetration 어트리뷰트의 값을 가져와 TargetArmor 어트리뷰트를 일부 무시
      • 커브 테이블 프로퍼티를 사용하여 계수를 설정하여 값을 조정
    • CriticalHitChance 어트리뷰트의 값을 가져와 확률적으로 크리티컬 피해를 줌
    • CriticalHitDamage 어트리뷰트의 값을 가져와 크리티컬 피해의 값을 설정
  • GE가 적용되는 TargetActor
    • Armor 어트리뷰트의 값을 가져와 입는 피해를 일부 감소
      • 커브 테이블 프로퍼티를 사용하여 계수를 설정하여 값을 조정
    • BlockChance 어트리뷰트의 값을 가져와 확률적으로 입는 피해 절반으로 감소
    • CriticalHitResistance 어트리뷰트의 값을 가져와 크리티컬 피해 일부 감소
      • 커브 테이블 프로퍼티를 사용하여 계수를 설정하여 값을 조정

 

1) CharacterClassInfo 클래스

 

CurveTable 멤버변수DamageCalculationCoefficients를 추가하여

데미지 연산에 사용레벨에 따라 다른 값으로 설정되는 계수를 설정한다

 

2) AuraAbilitySystemLibrary 클래스

 

이전에 작성한 GiveStartupAbilites 함수에서 GetCharacterClassInfo 함수를 호출하도록 수정한다

따라서 불필요한 로직을 생략할 수 있다

 

3) ExecCalc_Damage 클래스

 

래퍼 클래스로 사용하는 AuraDamageStatics 구조체에서 어트리뷰트를 더 추가하여

캡쳐할 어트리뷰트를 명시하고, 캡쳐를 진행한다

 

 

UExecCalc_Damage 클래스의 생성자에서

RelevantAttributesToCapture 리스트에 캡쳐한 어트리뷰트를 추가한다 

추가된 어트리뷰트의 Definition수정하는 연산과 관련지어 사용한다

 

:Execute 함수의 첫 번째 로직

 

Execute 함수첫 번째 로직은 위와 같다

GameplayEffect에 대한 SourceActor의 정보TargetActor의 정보를 설정한다

 

Execute 함수의 두 번째 로직

 

두 번째 로직은 위와 같다

SetByCaller 연산을 사용하여 Damage 태그에 해당하는 값을 가져와

타겟의 BlockChange / 타겟의 Armor / 소스의 ArmorPenetration따라 Damage의 값을 설정한다

 

Execute 함수의 마지막 로직

 

마지막 로직은 위와 같다

소스의 CriticalHitChance / Target의 CritiacalHitResistance / 소스의 CriticalHitDamage에 따라

최종 데미지를 계산한다

 

4) 언리얼 에디터

 

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

 

 

DA_CharacterClassInfo에서 데미지 연산에 사용할 계수를 설정하기 위한 커브 테이블을 위와 같이 설정한다

 

- 최종 실행 결과

 

728x90
반응형