애니메이션 노티파이
애니메이션을 재생하는 동안
원하는 타이밍에 애님 인스턴스의 멤버 함수를 호출하는 기능이다
애니메이션 노티파이는 애니메이션 시퀀스와 애니메이션 몽타주 모두 사용가능하다
애니메이션 노티파이의 활용
공격 애니메이션인 경우에 특정 애니메이션 프레임에서
충돌 검사 로직을 처리해야 한다
이때 애니메이션 노티파이를 활용하면 구현이 가능하다
애니메이션 노티파이 실습
Notifies 섹션 빈 공간에 우클릭을 하고
Add Notify를 통해 노티파이를 만들 수 있다
3번 공격을 하는 경우라면, 적절한 위치에 CheckHit Notify를 3개 작성하면 된다
그리고 AnimInstance에 “AnimNotify_노티파이명()”의 멤버 함수와
BroadCast할 멤버 변수를 만들어줘야 한다
또한 UHT에 의해 언리얼 시스템이 찾을 수 있도록
UFUNCTION() 매크로가 작성해야 한다
// SAnimInstance.h
...
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnCheckHit);
/**
*
*/
UCLASS()
class STUDYPROJECT_API USAnimInstance : public UAnimInstance
{
...
public:
...
protected:
UFUNCTION()
void AnimNotify_CheckHit()
{
if (OnCheckHit.IsBound() == true)
{
OnCheckHit.Broadcast();
}
}
public:
FOnCheckHit OnCheckHit;
protected:
...
};
// SPlayerCharacter.h
...
class STUDYPROJECT_API ASPlayerCharacter : public ASCharacter
{
...
public:
void ASPlayerCharacter::BeginPlay()
{
...
if (IsValid(AnimInstance) == true)
{
...
AnimInstance->OnCheckHit.AddDynamic(this, &ThisClass::OnCheckHit);
}
}
UFUNCTION()
void ASPlayerCharacter::OnCheckHit()
{
UKismetSystemLibrary::PrintString(this, FString::Printf(TEXT("CheckHit() has been called.")));
}
protected:
...
};
콤보 공격 구현시 주의점 1
애니메이션이 드래그 드랍해서 놓게 되면
연속되어 계속 재생되기 때문에
Montage Sections에서 각 애니메이션을 끊어주어야 한다
콤보 공격 구현시 주의점 2
AnimNotify의 Montage Tick Type을 Queued로 설정하게 되면
상황에 따라 AnimNotify가 발생하지 않는 경우가 있을 수 있기에
반드시 실행되어야 하는 AnimNotify는
Montage Tick Type을 Branching Point로 지정해야 한다
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 Collision - 충돌 감지 (0) | 2024.05.15 |
---|---|
언리얼 Collision - 충돌 설정 (0) | 2024.05.15 |
언리얼 Animation - Animation Montage (0) | 2024.05.14 |
언리얼 Animation - State Machine (0) | 2024.05.14 |
언리얼 Animation - AnimInstance (0) | 2024.05.14 |