- 방관속성 추가해주시고
//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;
'UE5 > Damage' 카테고리의 다른 글
[UE5] 치명타 구현 (0) | 2024.06.24 |
---|---|
[UE5] 데미지계산 계수 하드코딩 fix (0) | 2024.06.24 |
[UE5] Block Chance 구현 (0) | 2024.06.23 |
[UE5] 실행 계산 개념, 아머속성 계산-변경 구현 (0) | 2024.06.23 |
[UE5] 맞은적 머리위에 데미지 뜨도록 구현 (0) | 2024.06.23 |