EDR_Project / AnimInstance

 

EnemyCharacter에 사용될 애니메이션인스턴스 코드입니다.

"이득우의언리얼 c++ 게임 개발의 정석" 을 참고하였습니다.

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"

/**
 * 
 */
UCLASS()
class EDR_API UAnim_EDR_AnimInstance : public UAnimInstance
{
	GENERATED_BODY()
	
public:
	UAnim_EDR_AnimInstance();
	virtual void NativeUpdateAnimation(float DeltaSeconds) override;

	// 몽타주 실행 함수
	void PlayAttackMontage();
	
private:
	UPROPERTY(EditAnyWhere,BlueprintReadOnly,Category = Pawn, Meta=(AllowPrivateAccess = true))
	float CurrentPawnSpeed;

	// 애니메이션 몽타주 저장할 변수
	UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Attack, Meta = (AllowPrivateAccess = true))
	UAnimMontage* AttackMontage;
};

 

반응형

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;

	// 공격 애니메이션 몽타주 저장
	static ConstructorHelpers::FObjectFinder<UAnimMontage> ATTACK_MONTAGE(TEXT("/Game/GJ/Animation/Enemy_Anim/SwordAttack_Montage.SwordAttack_Montage"));
	if (ATTACK_MONTAGE.Succeeded()) 
	{
		AttackMontage = ATTACK_MONTAGE.Object;
	}
}

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("AnimPlay"));
		// 애니메이션 플레이
		Montage_Play(AttackMontage, 1.0f);
	}
}

 

공격 애니메이션 몽타주를 저장하여 호출받았을때 실행하는 함수PlayAttackMontage()가 있습니다.

 

 

 

ABP_Enemy

 

공격 애니메이션을 실행하기 위해서는 DefaultSlot을 추가할 필요가 있습니다.

'Unreal Engine 5 > EDR_Project' 카테고리의 다른 글

EDR_Project / AnimInstance (1)  (0) 2024.10.17
EDR_Project / Attack  (10) 2024.10.17
EDR_Project / CanAttack  (0) 2024.10.17
EDR_Project / Detect  (0) 2024.10.17
EDR_Project / Patrol  (0) 2024.10.17