Unreal Engine5/KDT 2024

[UE5 KDT2024] 29. 애님 노티파이 클래스

유잉유잉유잉 2025. 3. 13. 00:05
728x90

▶️ PlayerAttack 콜리전 설정 수정 (TR_PlayerAttack도 무시로 처리) 

 

▶️ 여러대 맞는 문제 

BP_Orc 에디터에서 

- 캡슐 컬리전 프리셋 monster로 

- 메쉬와 웨폰은 NoCollision 설정 



 


 

 

1. UPROPERTY( Replicated ) 보다 저렴한

UPROPERTY( ReplicatedUsing = 함수 ) 로 변경하기

 

MonsterBase.h

..
protected:
..
UPROPERTY( ReplicatedUsing = OnRep_HP )
int32 mHP2;

UPROPERTY( ReplicatedUsing = OnRep_Rotator )
FRotator mRotator;
..
public:
UFUNCTION()
void OnRep_HP();
UFUNCTION()
void OnRep_Rotator();
AMonsterBase::AMonsterBase()
{
    ..
    mHP2 = 5;
}

 

 

 


 

 

2. 애님 노티파이 클래스 생성 

 

1) Animation폴더 - cpp 클래스추가 - AnimNotify 상속 - AnimNotifyMain 클래스 추가

#include "EngineMinimal.h"
..
public :
	UAnimNotifyMain();

	virtual void Notify( USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation ) override;

Notify는 UAnimNotify에서 가져와서 override

UAnimNotifyMain::UAnimNotifyMain()
{}

void UAnimNotifyMain::Notify( USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation )
{
	GEngine->AddOnScreenDebugMessage( 1, 5, FColor::Red, L"UAnimNotifyMain::Notify" );
}

 

 

✔️ 이제 아무 애니가서 노티파이 추가하려고 하면 추가한 노티파이로 추가 가능해졌다. 

 

2) BPA_AnimOrc 에디터 -> GetHit_Orc_Anim 에디터 -> 노티파이 트랙추가

-> AnimNotifyMain 추가 

 

-> 실행하고 몬스터 때리면 위 로그가 출력되며, 코드에서 설정한 노티파이가 잘 호출되고 있음을 확인할 수 있다.



 

 


 

 

3. 애님노티파이 클래스 추가 및 테스트

 

1) 애니메이션 폴더,AnimNotifyState 상속, AnimNotifyStateMain 클래스 생성

ㄴ 트레일할때 노티파이 길게 잡았던것 처럼사용하면 된다.

#include "EngineMinimal.h"
..
UCLASS()
class RESTART0501_API UAnimNotifyStateMain : public UAnimNotifyState
{
	GENERATED_BODY()

public :
    UAnimNotifyStateMain();

    virtual void NotifyBegin( USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference ) override;
    virtual void NotifyTick( USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime, const FAnimNotifyEventReference& EventReference ) override;
	virtual void NotifyEnd( USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference ) override;
};
UAnimNotifyStateMain::UAnimNotifyStateMain()
{}

void UAnimNotifyStateMain::NotifyBegin( USkeletalMeshComponent * MeshComp, UAnimSequenceBase * Animation, float TotalDuration, const FAnimNotifyEventReference & EventReference )
{
    Super::NotifyBegin( MeshComp, Animation, TotalDuration, EventReference );

    UE_LOG( LogTemp, Warning, TEXT( "UAnimNotifyStateMain::NotifyBegin" ) );
}

void UAnimNotifyStateMain::NotifyTick( USkeletalMeshComponent * MeshComp, UAnimSequenceBase * Animation, float FrameDeltaTime, const FAnimNotifyEventReference & EventReference )
{
    Super::NotifyTick( MeshComp, Animation, FrameDeltaTime, EventReference );

    UE_LOG( LogTemp, Warning, TEXT( "UAnimNotifyStateMain::NotifyTick" ) );
}

void UAnimNotifyStateMain::NotifyEnd( USkeletalMeshComponent * MeshComp, UAnimSequenceBase * Animation, const FAnimNotifyEventReference & EventReference )
{
    Super::NotifyEnd( MeshComp, Animation, EventReference );

    UE_LOG( LogTemp, Warning, TEXT( "UAnimNotifyStateMain::NotifyEnd" ) );
}

 

 

▶️ AnimNotifyStateMain .h에서 UAnimNotifyState 함수 몇개 가져와서 오버라이드

▶️ 함수 구분

NotifyBegin // 시작

NotifyTick // 진행중

NotifyEnd // 끝날때



2) BPA_AnimOrc 에디터 -> Die_Orc_Anim -> 노티파이 스테이트 추가 -> AnimNotifyStateMain 추가 

 



728x90