[Unreal/C++] AnimNotify 사용 하기
애니메이션 프로그래머는 Animation Notification (애니메이션 노티파이), 또는 AnimNotify (애님 노티파이), 줄여서 그냥 Notify (노티파이)를 통해 애니메이션 시퀀스 도중의 특정 지점에 이벤트가 발생하도록 구성할 수 있습니다. 노티파이는 걷기나 달리기 도중의 발소리같은 이펙트 추가 및 애니메이션 도중 파티클 시스템을 스폰시키는 데 주로 사용됩니다.
애니메이션 노티파이를 사용해 보겠습니다.
AnimNotify를 상속받은 C++ 클래스를 생성합니다.
C++ 클래스 생성시 아래와 같은 코드가 작성됩니다.
애니메이션 몽타주에서 Notify를 추가하기 위해서 UAnimNotify에 정의되어 있는 함수를 오버라이드 해야합니다.
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimNotifies/AnimNotify.h"
#include "AN_DoubleShot.generated.h"
UCLASS()
class MAINPROJECT_API UAN_DoubleShot : public UAnimNotify
{
GENERATED_BODY()
};
UAnimNotify클래스로 이동하여 헤더 코드를 잠깐 살펴보면 아래와 같은 함수를 볼 수 있습니다.
언리얼 엔진 5.0부터?는 상단에 있는 Notify함수를 사용하지 않고 아래쪽 함수를 이용하라고 합니다.
변경 전 API를 사용하려 하면 친절하게도 업데이트 안내를 받을 수 있습니다.
Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.
다음 릴리스로 업그레이드하기 전에 코드를 새 API로 업데이트하세요. 그렇지 않으면 프로젝트가 더 이상 컴파일되지 않습니다.
UAnimNotify C++ 파일을 확인해보니 기존의 Notify함수는 비어있고 아래쪽에서 경고를 일으킨다는 함수가 보입니다.
Received_Notify정의가 없는 것을 보니 Blueprint에서는 Received함수를 사용하는 것 같습니다.
우리가 사용하게 될 아래 함수를 복사하여 헤더파일에 선언해주고 override합니다.
virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference);
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimNotifies/AnimNotify.h"
#include "AN_DoubleShot.generated.h"
UCLASS()
class MAINPROJECT_API UAN_DoubleShot : public UAnimNotify
{
GENERATED_BODY()
virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override;
};
이 Notify함수를 구현합니다.
부모의 Notify 함수를 호출해주고
사용할 오브젝트나 클래스를 받아 원하는 기능을 구현합니다.
이 때 조심할점은 에디터에서 게임이 시작되기 전에는 오브젝트나 클래스가 할당되지 않은 상태가 많기 때문에 예외처리를 꼼꼼히 해주셔야 합니다.
#include "Character/Notifies/AN_DoubleShot.h"
#include "Character/Character_TwinBlast.h"
void UAN_DoubleShot::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference)
{
Super::Notify(MeshComp, Animation, EventReference);
ACharacter_TwinBlast* character = Cast<ACharacter_TwinBlast>(MeshComp->GetOwner());
if (character == nullptr) return;
character->Function();
}
위 처럼 구현을 마친 코드는 컴파일 후 애니메이션 몽타주에 애니메이션 노티파이를 추가할 수 있습니다.
추가하기 전에 애니메이션 몽타주를 일시정지 하지 않으면 설정과 동시에 Fatal Error를 마주할 확률이 있습니다.
'Unreal > Manual' 카테고리의 다른 글
Unreal C++ Sphere Component 충돌체 추가 (0) | 2023.11.30 |
---|---|
Unreal C++ AnimNotifyState 사용 하기 (0) | 2023.11.30 |
Unreal Layered Blend per bone 본 별로 레이어 블렌딩 (0) | 2023.11.28 |
Unreal C++ CSV로 만든 데이터 DataTable로 가져오기 (0) | 2023.11.28 |
Unreal C++ Widget 변수 사용하기 (0) | 2023.11.26 |