24.10.19 AnimInstance 추가 사항입니다.
더이상 사용하지 않는다고 하였으나 EDR_Boss_Character의 공격 애니메이션이 재생될때 어느 타이밍에 공격 판정을 내릴지에 대한 애니메이션 노티파이를 추가하였습니다.
애니메이션 노티파이
애니메이션을 재생하는 동안 특정 타이밍에 애님 인스턴스에게 신호를 보내는기능입니다.
애님 인스턴스에서 만들어둔 노티파이 함수가 실행될려면 언리얼 런타임이 찾을 수 있도록 반드시 UFUNCTION() 매크로가 붙어있어야 합니다.
노티파이 추가 방법
노티파이를 만들 애니메이션 몽타주 파일을 엽니다.
노티파이 옆에 트랙을 클릭하여 노티파이 트랙 추가를 합니다.
추가된 트랙에 우클릭하여 새 노티파이를 추가합니다.
노티파이가 추가된 모습입니다.
AttackHitCheck
공격 판정에 사용 될 애니메이션 노티파이 AttackHitCheck를 만들었습니다.
Anim_EDR_AnimInstance.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
//
#include "CoreMinimal.h"
#include "Animation/AnimInstance.h"
#include "Anim_EDR_AnimInstance.generated.h"
// 공격이 맞았는지 확인하는 델리게이트
DECLARE_MULTICAST_DELEGATE(FOnAttackHitCheckDelegate);
/**
*
*/
UCLASS()
class EDR_API UAnim_EDR_AnimInstance : public UAnimInstance
{
GENERATED_BODY()
public:
UAnim_EDR_AnimInstance();
virtual void NativeUpdateAnimation(float DeltaSeconds) override;
// 몽타주 실행 함수
void PlayAttackMontage();
void PlayDeathMontage();
// 공격이 맞았는지 확인하는 델리게이트
FOnAttackHitCheckDelegate OnAttackHitCheck;
private:
UPROPERTY(EditAnyWhere,BlueprintReadOnly,Category = Pawn, Meta=(AllowPrivateAccess = true))
float CurrentPawnSpeed;
// 애니메이션 몽타주 저장할 변수
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Attack, Meta = (AllowPrivateAccess = true))
UAnimMontage* AttackMontage;
UPROPERTY()
TObjectPtr<class UAnimMontage> DeathMontage;
// 공격 히트 타이밍을 노티파이로 설정
UFUNCTION()
void AnimNotify_AttackHitCheck();
};
반응형
Anim_EDR_AnimInstance.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "Anim_EDR_AnimInstance.h"
#include "GameFramework/Character.h"
#include "GameFramework/PawnMovementComponent.h"
UAnim_EDR_AnimInstance::UAnim_EDR_AnimInstance()
{
CurrentPawnSpeed = 0.0f;
}
// 애니메이션 노티파이 공격지점 신호
void UAnim_EDR_AnimInstance::AnimNotify_AttackHitCheck()
{
OnAttackHitCheck.Broadcast();
}
void UAnim_EDR_AnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
auto Pawn = TryGetPawnOwner();
if (::IsValid(Pawn))
{
// 폰의 속력값 받아오는 함수
CurrentPawnSpeed = Pawn->GetVelocity().Size();
}
}
// 공격 애니메이션 실행 함수
void UAnim_EDR_AnimInstance::PlayAttackMontage()
{
if (!Montage_IsPlaying(AttackMontage))
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Yellow, TEXT("qqAnimPlay"));
// 애니메이션 플레이
Montage_Play(AttackMontage, 1.0f);
}
}
// 사망 애니메이션 실행함수
void UAnim_EDR_AnimInstance::PlayDeathMontage()
{
if (!Montage_IsPlaying(DeathMontage))
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Yellow, TEXT("qqAnimPlay"));
// 애니메이션 플레이
Montage_Play(DeathMontage);
}
}
공격 애니메이션이 재생되면 만들 어둔 AttackHitCheck노티파이가 호출됩니다.
노티파이가 호출되면 애니메이션 인스턴트의 AnimNotify_AttackHitCheck()가 호출되어 델리게이트로 브로드캐스팅합니다.
'Unreal Engine 5 > EDR_Project' 카테고리의 다른 글
EDR_Project / TraceChannel (0) | 2024.10.20 |
---|---|
EDR_Project / Character (2) Collision 프리셋 (0) | 2024.10.20 |
EDR_Project / TurnToTarget, 회전 부드럽게 (0) | 2024.10.18 |
EDR_Project / Character (1) (4) | 2024.10.17 |
EDR_Project / EDR_Boss_Giant (0) | 2024.10.17 |