1. 맞는 몽타주, 죽는 몽타주, 넉백 몽타주변수 생성
2. TakeDamage()함수 구현
CharacterBase.h
// 헤더 추가
#include "GameFramework/DamageType.h"
...
// ================TakeDmage()함수용================
// 피격 애니메이션
UPROPERTY(EditAnywhere, Category = "Animation")
UAnimMontage* HitReactionMontage;
// 사망 애니메이션
UPROPERTY(EditAnywhere, Category = "Animation")
UAnimMontage* DeathMontage;
//===================================================
...
// TakeDamage함수
UFUNCTION(BlueprintCallable, Category = "Stat")
virtual float TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
CharacterBase.cpp
float ASW_CharacterBase::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
{
const int32 DamageToApply = FMath::Clamp(FMath::RoundToInt(DamageAmount), 0, Health);
if (DamageToApply <= 0) return 0.f;
Health -= DamageToApply;
// 체력바 UI 업데이트
UpdateHealthBar();
// 사망이 아닐 경우 피격 처리
if (Health > 0)
{
// 피격 애니메이션 재생
if (HitReactionMontage && !bIsLocked)
{
PlayAnimMontage(HitReactionMontage);
}
// 넉백 처리 (이동만 물리적으로)
if (DamageCauser)
{
FVector KnockbackDir = (GetActorLocation() - DamageCauser->GetActorLocation()).GetSafeNormal();
LaunchCharacter(KnockbackDir * 500.f + FVector(0.f, 0.f, 200.f), true, true);
}
}
else
{
// 체력 최소값 보정
Health = 0;
// 사망 애니메이션
SetLockedState(true); // 이동/입력 잠금
if (DeathMontage)
{
PlayAnimMontage(DeathMontage);
}
// TODO: 사망 후 파괴 or 리스폰 처리 (필요시 타이머로 처리 가능)
}
return DamageToApply;
}
CharacterBase.h에 피격애니메이션 몽타주와 죽는 애니메이션 몽타주를 생성했기때문에 CharacterBase를 상속받는 캐릭터들 BP에 보면 애니메이션 몽타주가 추가되었고, 각각 상황에 맞는 애니메이션 몽타주를 넣어준다.
ex) Brall캐릭터와 Dubu캐릭터 BP확인
체력이 깍일때마다 Hit Reaction Montage에 애니메이션 몽타주가 실행되고, 체력이 0이되면 Death Montage에 애니메이션 몽타주가 실행됨.
'UE5 멀티대전게임 일기' 카테고리의 다른 글
UE5 멀티대전게임 일기(9) Brall, Dubu캐릭터 스킬 구현 현황 (0) | 2025.04.08 |
---|---|
UE5 멀티대전게임 일기(8) 캐릭터 스킬데미지, 콤보평타데미지 구현방식 (0) | 2025.04.07 |
UE5 멀티대전게임 일기(6) 조율점 현재 상황 (0) | 2025.04.07 |
UE5 멀티대전게임 일기(5) 카메라 거리 고정 + 캐릭터 체력바 추가 (0) | 2025.04.06 |
UE5 멀티대전게임 일기(4) 개별적으로 캐릭터 이동속도 구현 방법 (0) | 2025.04.06 |