관리 메뉴

Mini

애니메이션 기초 본문

UE5

애니메이션 기초

Mini_96 2022. 8. 14. 12:29

Mycharacter::Mesh에서 플레이할 애니메이션 설정

MyAnimInstance에서 애니메이션 관리

 

* 작업구조

cpp-상속받은 블루프린트

ex)    MyAnimInsatnce.cpp ---상속받은 ABP_MyAnim

          float speed => 애니메이션 분기

 

※ 코드작성후 저장만으로 반영X

  엔진에서 컴파일 해야함

 

speed>0 ? then jmp else idel을 BP로 구현

 

* 값 전달 방법

1. MyCharacter에서 애니메이션의 speed를 얻어와서 조작한다.

(-) 코드가 많아지면 겹쳐서 스피드를 조작할 가능성 => 버그를 찾기 어려움

 -> 개선 : 애니메이션에서 플레이어의 정보를 얻어와서 관리함.

ex)매 프레임마다

멤버변수 Speed = Pawn->GetVelocituy().Size()

멤버변수 isFalling = Character->GetMovementComponent()->IsFalling();

&& speed, isFalling 이용해서 => 애니메이션 분기 

 

* 값 전달하기

NativeUpdateAnimation() 함수는 매 틱마다 실행된다.

1.부모의 업데이트 실행

2.pawn을 받아옴.

3.유효하면 폰의 스피드 갱신

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

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

/**
 * 
 */
UCLASS()
class TESTUNREALENGINE_API UMyAnimInstance : public UAnimInstance
{
	GENERATED_BODY()

	virtual void NativeUpdateAnimation(float DeltaSeconds) override;
	
private:
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Pawn, Meta=(AllowPrivateAccess=true));
	float Speed;
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "MyAnimInstance.h"

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

	auto pawn = TryGetPawnOwner();
	if (IsValid(pawn))
	{
		Speed = pawn->GetVelocity().Size();
	}
}

'UE5' 카테고리의 다른 글

애니메이션 몽타주  (0) 2022.08.14
스테이트 머신  (0) 2022.08.14
블루프린트 클래스  (0) 2022.08.11
캐릭터 생성  (0) 2022.08.08
게임플레이 프레임워크  (0) 2022.08.07