애니메이션 블루프린트와 스테이트 머신

DevBison·2025년 8월 26일

언리얼 C++ 스켈레탈 애니메이션 기초 정리

스켈레탈 컴포넌트에 애니메이션을 지정해서 사용할 수 있다.
스켈레탈 애니메이션이 동작하는 방법은 크게 3가지 방식이 있다.

  1. Use Animation Blueprint

    • 플레이어나 복잡한 애니메이션 제어가 필요할 때 사용
    • UAnimInstance 상속
  2. Use Animation Asset

    • 단순한 특정 동작 (예: 상점 NPC)
    • 특정 Sequence를 직접 지정
  3. Use Custom Mode

    • 직접 만든 사용자 정의 애니메이션 로직

애니메이션 블루프린트 생성

애니메이션 블루프린트를 만들고, 부모 클래스UAnimInstance를 상속받아 구현한 PlayerDefaultAnimInstance를 지정한다.

  • Skeleton 선택: 어떤 캐릭터 뼈대를 기준으로 애니메이션을 적용할지 선택
  • Template: 기본 그래프 구조를 제공
  • Parent Class: 우리가 만든 AnimInstance 클래스 지정

애님 그래프 기본

애님 그래프는 "최종 Output Pose"를 만드는 흐름을 시각적으로 표현한다.

  • Sequence를 배치 → Sequence Player가 애니메이션을 실행
  • 루프 체크 시 무한 반복 실행


스테이트 머신 (State Machine)

애니메이션을 상황별로 나눠 전환할 수 있다.
예: Idle ↔ Run ↔ Sprint

  • Idle 상태 생성 후 Sequence 연결
  • Transition(트랜지션) 조건을 통해 다른 동작으로 전환

예)

  • MoveSpeed > 0 → Idle → Run 전환
  • MoveSpeed <= 0 → Run → Idle 전환


C++ 연동하기 (AnimInstance)

PlayerDefaultAnimInstance에 속도 변수를 추가한다.

// PlayerDefaultAnimInstance.h
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement")
float MoveSpeed;

업데이트 함수에서 Pawn의 이동 속도를 가져온다.

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

    APawn* OwnerPawn = TryGetPawnOwner();
    if (OwnerPawn)
    {
        FVector Velocity = OwnerPawn->GetVelocity();
        MoveSpeed = Velocity.Size();
    }
}
  • TryGetPawnOwner() → AnimInstance가 붙은 캐릭터를 얻음
  • GetVelocity().Size() → 속도 벡터의 크기를 계산 (이동 속도)

캐릭터에 AnimBlueprint 적용

  • SkeletalMeshComponentAnimation ModeUse Animation Blueprint로 설정
  • Anim Class를 만든 ABPTest로 지정

C++에서도 지정할 수 있다.

static ConstructorHelpers::FClassFinder<UAnimInstance> AnimBPClass(TEXT("/Game/Animation/ABPTest.ABPTest_C"));
if (AnimBPClass.Succeeded())
{
    GetMesh()->SetAnimInstanceClass(AnimBPClass.Class);
}
  • 경로 끝에 _C 붙여야 AnimBlueprint의 클래스 정보를 가져올 수 있음

최종 확인

  • Idle 상태에서 속도가 생기면 Run으로 전환
  • 속도가 0이면 다시 Idle로 복귀
  • Transition 경과 시간(Blend Time)으로 전환 부드럽게 조절 가능

(중요 개념)

  1. AnimSequence vs AnimMontage

    • AnimSequence: 단일 모션 (Idle, Run, Attack 등)
    • AnimMontage: 특정 상황에 재생하는 애니메이션 (스킬, 공격, 컷신 등)
  2. AnimInstance 업데이트

    • NativeUpdateAnimation: 게임 스레드에서 호출
    • NativeThreadSafeUpdateAnimation: 애니메이션 스레드에서 호출
  3. Transition Rule Best Practice

    • 속도, 점프 여부, 상태 플래그(공격 중, 피격 중 등)를 변수로 관리
    • Transition Rule에서 단순 비교 (MoveSpeed > 0)로 제어

결론

  • 간단한 애니메이션 → Animation Asset 직접 지정
  • 플레이어나 복잡한 AI → Animation Blueprint + AnimInstance 사용
  • 특수한 상황 → AnimMontage 또는 Custom Mode

→ 실제 게임 개발에서는 대부분 AnimBlueprint 기반으로 작업하고, 필요할 때 Montage로 스킬/공격 모션을 처리한다.

profile
응애 개발자

0개의 댓글