애니메이션 재생중 특정 시점이 되었을 때 코드에 알람(노티파이)을 주는 개념
애니메이션, 몽타주 둘다 설정 가능하다. 유니티에도 거의 동일한 기능이 있다.
노티파이 설정
// MyAnimInstance.h
class TESTUNREALENGINE_API UMyAnimInstance : public UAnimInstance
{
GENERATED_BODY()
private:
UFUNCTION()
void AnimNotify_AttackHit();
}
// -------
// MyAnimInstance.cpp
void UMyAnimInstance::AnimNotify_AttackHit()
{
UE_LOG(LogTemp, Log, TEXT("AnimNotify_AttackHit"));
}
코드에서도 추가해 주는데 메소드명을 막 짓는것이 아니라 AnimNotify_"노티파이명" 으로 지정해 주어야 한다.
실행 후 공격 시 애니메이션의 노티파이 때마다 한 번씩 호출되는 것을 확인할 수 있다.
지금까지는 한번의 공격으로 평타 세번이 연속해서 나갔지만 각각의 모션을 끊어서 재생하고 싶다면 몽타주 섹션으로 구분하고 링크를 끊어주면 된다. 최상단이 몽타주 섹션이고 우클릭으로 추가할 수 있다.
// MyAnimInstance.h
class TESTUNREALENGINE_API UMyAnimInstance : public UAnimInstance
{
// .. 생략
public:
void JumpToSection(int32 SectionIndex);
FName GetAttackMontageName(int32 SectionIndex);
};
// ----------
// MyAnimInstance.cpp
void UMyAnimInstance::JumpToSection(int32 SectionIndex)
{
FName Name = GetAttackMontageName(SectionIndex); // 섹션 이름 변환
Montage_JumpToSection(Name, AttackMontage); // 해당 섹션 재생
}
FName UMyAnimInstance::GetAttackMontageName(int32 SectionIndex)
{
// 언리얼에서 사용하는 이름 타입이라고 생각됨
return FName(*FString::Printf(TEXT("Attack%d"), SectionIndex));
}
// ---------
// MyCharacter.h
// ---------
// MyCharacter.cpp
void AMyCharacter::Attack()
{
if (IsAttacking)
return;
AnimInstance->PlayAttackMontage();
AnimInstance->JumpToSection(AttackIndex); // 공격시마다 0, 1, 2, 0.. 을 넘겨줌
AttackIndex = (AttackIndex + 1) % 3;
IsAttacking = true;
}
구분된 섹션을 코드로 제어할 수 있다.
'언리얼 엔진 > 언리얼 엔진4 입문' 카테고리의 다른 글
[UE4 입문] 충돌 기초 (0) | 2022.09.02 |
---|---|
[UE4 입문] 블렌드 스페이스 (0) | 2022.09.02 |
[UE4 입문] 델리게이트 (0) | 2022.09.02 |
[UE4 입문] 애니메이션 몽타주 (0) | 2022.09.02 |
[UE4 입문] 스테이트 머신 (0) | 2022.09.02 |