Unreal Engine GAS(Gameplay Ability System) 심화LESSON 26
데미지 계산 파이프라인과 방어력·치명타 확장
난이도심화
예상 시간190분
선수지식25강의 Attribute Capture와 Execution
26강. 데미지 계산 파이프라인과 방어력·치명타 확장
1. 이번 강의에서 해결할 문제
Ability, Projectile, 함정이 각각 다른 데미지 식을 사용하면 방어력·무적·치명타 정책이 달라집니다. Client가 치명타 여부를 결정하면 결과를 조작할 수 있습니다. 모든 Damage Source가 같은 서버 계산 경로를 사용하게 합니다.
2. 학습 목표
3. 핵심 개념
BaseDamage(SetByCaller)
+ AttackPower(Source Capture)
→ Critical(Server RNG or deterministic policy)
→ Defense(Target Capture)
→ Invulnerability/Immunity check
→ IncomingDamage Output
→ AttributeSet clamps Health and emits death
식은 게임 디자인에 따라 다르지만 음수, NaN, 과도한 값과 Defense 분모를 방어해야 합니다.
4. 구현
ExecCalc_Damage.cpp
void UExecCalc_Damage::Execute_Implementation(
const FGameplayEffectCustomExecutionParameters& Params,
FGameplayEffectCustomExecutionOutput& Output) const
{
const FGameplayEffectSpec& Spec = Params.GetOwningSpec();
FAggregatorEvaluateParameters Eval;
Eval.SourceTags = Spec.CapturedSourceTags.GetAggregatedTags();
Eval.TargetTags = Spec.CapturedTargetTags.GetAggregatedTags();
float Attack = 0.0f;
float Defense = 0.0f;
Params.AttemptCalculateCapturedAttributeMagnitude(
DamageCaptures().AttackPowerDef, Eval, Attack);
Params.AttemptCalculateCapturedAttributeMagnitude(
DamageCaptures().DefenseDef, Eval, Defense);
const float Base = FMath::Max(0.0f,
Spec.GetSetByCallerMagnitude(GASCombatTags::Data_Damage, true, 0.0f));
const float Raw = FMath::Max(0.0f, Base + Attack);
const float Mitigation = 100.0f / (100.0f + FMath::Max(0.0f, Defense));
const float FinalDamage = FMath::Clamp(Raw * Mitigation, 0.0f, 100000.0f);
if (FinalDamage > 0.0f)
{
Output.AddOutputModifier(FGameplayModifierEvaluatedData(
UGASAttributeSet::GetIncomingDamageAttribute(),
EGameplayModOp::Additive,
FinalDamage));
}
}
치명타를 추가할 때 서버 난수 결과를 Effect Context의 커스텀 데이터 또는 Cue Parameters에 전달해 표현이 같은 결과를 보게 합니다. Client가 보낸 bCritical을 신뢰하지 않습니다.
5. 코드가 동작하는 이유
모든 Damage Effect가 같은 Execution을 사용하고 AttributeSet의 IncomingDamage 후처리로 수렴합니다. 방어 식의 분모와 범위를 방어해 비정상 수치가 Health를 오염시키지 않으며 서버만 최종 Modifier를 출력합니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2데미지 계산 파이프라인과 방어력·치명타 확장 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
26강. 데미지 계산 파이프라인과 방어력·치명타 확장 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.