본문 바로가기
Unreal/Manual

Unreal C++ AnimInstance 구현

by Dev_카페인 2023. 11. 22.
반응형

[Unreal/C++] AnimInstance 구현

 

AnimInstance를 상속받는 클래스 생성

 

코드 작성

// MyAnimInstance.h

#pragma once

#include "CoreMinimal.h"
#include "Animation/AnimInstance.h"
#include "DefaultCharacterAnimInstance.generated.h"

UCLASS()
class MAINPROJECT_API UDefaultCharacterAnimInstance : public UAnimInstance
{
	GENERATED_BODY()
	
// UAnimInstance에 작성된 BeginPlay와 update를 오버라이드
public :
	virtual void NativeBeginPlay() override;
	virtual void NativeUpdateAnimation(float DeltaSeconds) override;

// 캐릭터의 속도와 방향을 이용할 예정이므로 변수를 생성한다.
protected :
	UPROPERTY(BlueprintReadOnly, EditAnywhere)
		float Speed;
	UPROPERTY(BlueprintReadOnly, EditAnywhere)
		float Direction;

// 이 AnimInstance를 가지고 있는 캐릭터를 위한 변수
private :
	class ACharacter* OwnerCharacter;
};

 

// MyAnimInstance.cpp

#include "Character/DefaultCharacterAnimInstance.h"

#include "GameFramework/Character.h"

void UDefaultCharacterAnimInstance::NativeBeginPlay()
{
	Super::NativeBeginPlay();	// 부모 호출

	// OwnerCharacter를 가져온다.
	OwnerCharacter = Cast<ACharacter>(TryGetPawnOwner());
}

void UDefaultCharacterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
	Super::NativeUpdateAnimation(DeltaSeconds);

	// NativeUpdateAnimation은 에디터에서도 동작하기 때문에 널체크는 필수입니다.
    if (OwnerCharacter == nullptr) return;
	// OwnerCharacter의 Speed를 가져온다.
	Speed = OwnerCharacter->GetVelocity().Size2D();
}

 

만든 클래스를 상속받는 애니메이션 블루프린트를 만든다.

이 때 주의할점은 클래스를 우클릭해서 기반 블루프린트를 만들게 되면 AnimGraph가 보이지 않는다.

사용할 스켈레톤을 설정해주고 만들어놓은 클래스를 상속받는다.

이름은 관례에 맞게 ABP 로 시작하도록 지정한다.

만들어지게 되면 AnimGraph를 볼 수 있고 만들어진 변수를 사용할 수 있습니다.

 

 

 

 

 

 

 

 

 

반응형