본문 바로가기

언리얼레퍼런스/캐릭터애니메이션

[UE5] Notify

나이아가라 FX를 Player에 추가한 상태에서 시작한다. C++에서는 찾기만 할꺼다. 

niagaraFX = GetComponentByClass< UNiagaraComponent>();

플레이어 클래스 헤더에  niagaraFX 변수와 ShowFX() 함수를 선언한다.

public:
	UPROPERTY(EditAnywhere, Category = "Animation")
	class UNiagaraComponent* niagaraFX;
    void ShowFX(bool show);

플레이어.cpp에 블루프린트에서  나이아가라FX와 niagaraFX변수를 연결해준다.

게임시작시는 이펙트를 꺼준다.

void ATPlayer::BeginPlay()
{
	....
	niagaraFX = GetComponentByClass< UNiagaraComponent>();
    niagaraFX->SetVisibility(false);
}

ThirdPersonTemp.Build.cs를 열어 Niagra를 추가해준다

public class ThirdPersonTemp : ModuleRules
{
	public ThirdPersonTemp(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", 
        "InputCore", "EnhancedInput", "Niagara" });

Niagra를 추가했으므로 언리얼에디터 VisualStudio를 끄고 프로젝트폴더에서 솔루션을 지우고 다시만들어 솔루션을 다시 연면 전체적으로 다시 리빌드 된다.

이펙트를 설정해주는 함수를 구현한다. 점프시 이펙트는 켜고 캐릭터메시는 끄고 착지하면 반대로 할것이다.

void ATPlayer::ShowFX(bool show)
{
	if (!niagaraFX) {
		niagaraFX = GetComponentByClass< UNiagaraComponent>();
	}
    bool _show = GetCharacterMovement()->IsFalling();
	niagaraFX->SetVisibility(_show);
	GetMesh()->SetVisibility(!_show);
}

AnimNofify C++클래스를 만들어 이름을 AnimNotifyJump로 한다.

헤더에 Notify 함수를 선언한다. 플레이어 클래스 참조도 만들어 준다 Notify는 부모클래스를 F12로 찾아 검색하면 된다. 함수앞에는 virtual 뒤에는 override를 붙여준다.

public:
	virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, 
    const FAnimNotifyEventReference& EventReference) override;
	class ATPlayer* tpsPlayer;

함수를 구현해준다  애니메이션에서 Notify가 오면 플레이어의 ShowFX()함수를 불러준다.

void UAnimNotify_NS_Skeleton::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference)
{
	tpsPlayer = Cast<ATPlayer>(MeshComp->GetOwner());
	if (tpsPlayer) {
		tpsPlayer->ShowFX(true);
	}
}

 

만든후 이 클래스를 이용해 BP_AnimNotifyJump 블루프린트를 만든다. 그래야 애니메이션 에디터에서 보인다.

점프 애니메이션을 열고 우클릭하고 자신이 만든 Notify 블루프린트를 선택한다. 이러면 애니메이션이 플레이될때 Notify가 발생된다.  애니메이션 시작지점에 두면 좋다 끝에두면 딜레이가 발생하는듯 하다.