목차
- 체력이 0이 되면 데스 애니메이션 재생하기
1. 체력이 0이 되면 데스 애니메이션 재생하기
에너미에 체력이 존재하고 이 체력이 다하면 데스 애니메이션을 재생할 것이다.
가장 먼저 캐릭터가 살아있는지 아닌지 여부를 알려주는 함수를 Attribute 클래스에서 만들 것이다.
class PRACTICE_API UAttributeComponent : public UActorComponent
{
// 생략
public:
bool IsAlive();
}
bool UAttributeComponent::IsAlive()
{
return Health > 0.f;
}
이제 캐릭터의 생존여부를 알 수 있게 되었으니 캐릭터가 Hit를 했을 때 Hit 애니메이션을 재생해야할지 데스 애니메이션을 재생해야할지 구분할 필요가 있다.
에너미 클래스에 있는 GetHit_Implementation() 함수를 바꿀 것이다.
가장 먼저 재생할 몽타주를 담을 변수와 이를 재생할 함수를 선언하자.
UCLASS()
class PRACTICE_API AEnemy : public ACharacter, public IHitInterface
{
GENERATED_BODY()
// 생략
protected:
void Die();
// 생략
private:
UPROPERTY(EditDefaultsOnly, Category = "Montage")
UAnimMontage* DeathMontage;
// 생략
}
void AEnemy::Die()
{
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
if (AnimInstance && DeathMontage)
{
const int32 SectionCount = DeathMontage->GetNumSections() - 1;
const int32 Selection = FMath::RandRange(0, SectionCount);
const FName SectionName = DeathMontage->GetSectionName(Selection);
AnimInstance->Montage_Play(DeathMontage);
AnimInstance->Montage_JumpToSection(SectionName, DeathMontage);
}
}
데스 몽타주에는 여러가지 애니메이션이 있고 그 중 하나를 랜덤으로 재생할 것이다.
이 함수를 실행하는 곳은 GetHit 함수이다.
void AEnemy::GetHit_Implementation(const FVector& ImpactPoint)
{
if (Attributes && Attributes->IsAlive())
{
DirectionalHitReact(ImpactPoint);
}
else
{
Die();
}
// 생략
}
이제 컴파일하고 재생이 되는지 확인해보자.
비록 데스 애니메이션 재생이 끝나면 idle 애니메이션으로 돌아온다는 문제점이 있지만 애니메이션 자체는 재생이 잘 된다.
이제 이 죽어있는 상태를 계속 유지할 방법을 알아보자.
'게임프로그래밍 > 실습1' 카테고리의 다른 글
[언리얼 실습] 52. 에너미 사망시 이것저것 수정하기 (0) | 2024.11.04 |
---|---|
[언리얼 실습] 51. 데스 포즈 유지하기 (0) | 2024.11.02 |
[언리얼 실습] 49. 데미지 시스템 사용하기 (0) | 2024.11.02 |
[언리얼 실습] 48. 실제 체력바 퍼센트 조절하기 (0) | 2024.11.02 |
[언리얼 실습] 47. C++ 유저 위젯 클래스 만들어서 블루프린트 변수와 C++ 변수 바인딩하기 (0) | 2024.11.01 |