Unreal
[UE5/언리얼엔진5] 애니메이션 몽타주 랜덤 재생 / How to Play Animation Montage Randomly C++
건전한 건전지
2023. 7. 10. 23:55
728x90
반응형
오늘은 애니메이션 몽타주를 C++로 랜덤하게 플레이 하는 방법을 알아보자.
애니메이션 몽타주 생성
애니메이션 몽타주를 생성하고 몽타주 섹션의 이름을 순서대로 작성해주자.
C++ 코드 작성
해당 애니메이션 몽타주의 섹션 개수를 가져오기 위해 CompositeSections.Num()을 사용해야한다.
-- EnemyCharacter.cpp --
void AEnemyCharacter::PlayAnimation(UAnimMontage* AnimMontage)
{
if(UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance())
{
int32 JumpSection = FMath::RandRange(1, AnimMontage->CompositeSections.Num());
FName SectionName = FName(*FString::Printf(TEXT("%d"), JumpSection));
AnimInstance->Montage_Play(AnimMontage);
AnimInstance->Montage_JumpToSection(SectionName);
}
}
int32 JumpSection = FMath::RandRange(1, AnimMontage->CompositeSections.Num());
현재 플레이 할 AnimMontage의 Section 개수를 가져와서 1~MAX사이의 랜덤 값을 뽑아준다.
위에서 설정할 애니메이션 중 N번째 항목으로 점프하기 위함이다.
FName SectionName = FName(*FString::Printf(TEXT("%d"), JumpSection));
Montage_JumpToSection() 함수는 FName을 인자로 필요로 하기 때문에 정수를 FName으로 변환해주자.
-- EnemyCharacter.h --
UPROPERTY(EditAnywhere, Category = Custom, meta = (AllowPrivateAccess = "true"))
UAnimMontage* DeathAnimMontage;
UPROPERTY(EditAnywhere, Category = Custom, meta = (AllowPrivateAccess = "true"))
UAnimMontage* HitAnimMontage;
위처럼 헤더파일에 애니메이션 몽타주별로 선언해놓고 어떤 행동을 실행할 때 PlayAnimation에 해당 애니메이션 몽타주를 인자로 넘겨주어 사용하면 된다.
ex)
공격을 받았을 때 피가 0 이하이면 사망하는 부분을 작성한 코드
if(Health <= 0.f && !bIsDead)
{
SetState(EEnemyState::Dead);
PlayAnimation(DeathAnimMontage);
bIsDead = true;
StopMovement();
GetWorldTimerManager().SetTimer(DestroyTimer, this, &AEnemyCharacter::TempFunc, 1.4f);
}
핵심 코드는 이 한 줄이다.
AnimMontage->CompositeSections.Num()
728x90
반응형