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