Mini

[UE5] 방어력, 방관 구현 본문

UE5/Damage

[UE5] 방어력, 방관 구현

Mini_96 2024. 6. 24. 01:03

- 방관속성 추가해주시고

//BP에노출안할거임, c++안에서만 사용되는 원시구조체
struct AuraDamageStatics
{
    //캡쳐속성 선언 매크로 : 속성포인터가지고있음
    DECLARE_ATTRIBUTE_CAPTUREDEF(Armor);
    DECLARE_ATTRIBUTE_CAPTUREDEF(ArmorPenetration);
    DECLARE_ATTRIBUTE_CAPTUREDEF(BlockChance);
    
    AuraDamageStatics()
    {
       DEFINE_ATTRIBUTE_CAPTUREDEF(UAuraAttributeSet, Armor, Target, false); //아머라는 속성을 캡쳐하겠다. from target(적) 스냅샷X
       DEFINE_ATTRIBUTE_CAPTUREDEF(UAuraAttributeSet, BlockChance, Target, false); //아머라는 속성을 캡쳐하겠다.
       DEFINE_ATTRIBUTE_CAPTUREDEF(UAuraAttributeSet, ArmorPenetration, Source, false); //아머라는 속성을 캡쳐하겠다. from 공격자(아우라)임에 주의
    }
    
};

//싱글톤 Getter
static const AuraDamageStatics& DamageStatics()
{
    static AuraDamageStatics Dstatics;
    return Dstatics;
}

UExecCalc_Damage::UExecCalc_Damage()
{
    RelevantAttributesToCapture.Add(DamageStatics().ArmorDef); //캡쳐속성 배열에추가
    RelevantAttributesToCapture.Add(DamageStatics().BlockChanceDef); //캡쳐속성 배열에추가
    RelevantAttributesToCapture.Add(DamageStatics().ArmorPenetrationDef); //캡쳐속성 배열에추가

}

- 데미지 계산해주시고

//방어력 얻어오기
float TargetArmor = 0.f;
//현재 설정되있는 BlockChance값을 얻어와서 Out변수에 집어넣음 (현재 4로 설정되있음)
ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(DamageStatics().ArmorDef, EvaluationParameters,TargetArmor );
TargetBlockChance = FMath::Max<float>(TargetArmor,0.f);

//방관 얻어오기
float SourceArmorPenetration = 0.f;
//현재 설정되있는 BlockChance값을 얻어와서 Out변수에 집어넣음 (현재 4로 설정되있음)
ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(DamageStatics().ArmorPenetrationDef, EvaluationParameters,SourceArmorPenetration );
TargetBlockChance = FMath::Max<float>(SourceArmorPenetration,0.f);

//방관은 방어력을 %로 무시함 , ex : 방관100이면 방어 100% 무시함 / 뒤의계수 == op 조정
if(SourceArmorPenetration>100.f) SourceArmorPenetration=100.f;
const float EffectiveArmor = TargetArmor *= (100 - SourceArmorPenetration * 0.25f) / 100.f; //유효방어력 = 방관계산후 방어력
Damage *= (100-EffectiveArmor * 0.33f) / 100.f;

적아머는 9.6이고 캐릭터 방관은 4.9임을 확인가능함
결과 : 데미지가 40으로 깍인모습

 

https://github.com/DongHoonYu96/GameplayAbilitySystem_Aura/commit/a13b0b44fb3ff3d9b3bc9f628b157340647befa1

 

feat : 방어력, 방관 구현 · DongHoonYu96/GameplayAbilitySystem_Aura@a13b0b4

Bisu96 committed Jun 23, 2024

github.com