본문 바로가기

[C++과 Unreal Engine으로 3D 게임 개발] State Machine 설계를 통한 캐릭터 동작 애니메이션 적용

@iamrain2025. 9. 19. 15:15

애니메이션 블루프린트

언리얼 엔진에서 캐릭터의 골격(스켈레톤) 기반 애니메이션을 시각적으로 설계하는데 특화된 전용 블루프린트.

스켈레탈 메시, 애니메이션 시퀀스, State Machine 등을 연결하는 "중간 다리" 역할.

Anim Graph & Event Graph

Anim Graph

  • 입력 노드 → 블렌딩(Blend) → 출력 노드(Output Pose) 순으로, 캐릭터가 어떤 포즈와 애니메이션을 취할지 결정

Event Graph

  • Tick 이벤트나 BlueprintImplementableEvent 등을 활용해 C++ 혹은 게임 로직과 애니메이션을 연동할 수 있다.

 

이벤트 그래프에서 Movement Component 정보 받아오기

캐릭터 Movement Component 변수화

Movement Component는 캐릭터의 이동 속도, 가속도, 점포, 낙하 여부 등 다양한 이동 관련 정보를 제공

애니메이션 블루프린트와 캐릭터를 연동해, 캐릭터의 이동 상태에 따라 다른 애니메이션을 재생하기 위해서 필수적

변수 생성
변수 초기화

매 프레임마다 캐릭터의 수평 속도 가져오기

Event BlueprintUpdateAnimation 노드는 프레임마다 호출되어 애니메이션 로직을 업데이트한다.

Valid 체크
Ground Speed 계산

매 프레임마다 캐릭터의 움직임 여부 저장

정지 상태와 이동 중 인지를 구분

매 프레임마다 캐릭터의 낙하 여부 저장

점프 중이거나 공중에 있는 상태를 판별

 

애님 그래프에서 "Locomotion" State Machine 설계

State Machine, 상태 기계는 언리얼 엔진의 애니메이션 시스템에서 캐릭터의 상태에 따라 어떤 애니메이션을 재생하고 어떻게 전환할지를 결정하기 위한 논리적 구조다.

State Machine의 핵심 개념

  1. State(상태)
    • 캐릭터가 현재 어떤 동작을 하고 있는지
  2. Transition(전환)
    • 한 상태에서 다른 상태로 언제 전환되는지 조건(Condition)을 정의
  3. Animation Graph와의 연결
    • State Machine 내부의 상태는 실제로 재생할 애니메이션을 배치하는 장소
    • State 간 전환 조건을 만족하면 다른 애니메이션이 재생되도록 한다.

"Locomotion" State Machine

Locomotion 생성
Idle, Walk/Run State 생성
Idle 동작
Walk / Run 동작
Idle to Walk / Run
Walk / Run to Idle

 

애님 그래프에서 "Main States" State Machine 설계

"Main States" State Machine 생성

Control Rig 설정

  • "Set Initial Transforms From Mesh" 체크
    • 현재 스켈라텔 메쉬의 뼈 변환을 그대로 초기값으로 사용하겠다는 의미
    • 매 프레임 계산된 포즈를 기반으로 Control Rig가 추가적인 IK나 변형을 진행
  • Control Rig → Control Rig Class에서 `CR_Mannequin_BasicFootIK` 지정
    • 프로젝트에 존재하는 IK용 Control Rig 에셋
  • Input / Output 모두 `ShouldDoIKTrace`의 `Use Pin` 체크
    • 실제 발 위치를 추적(Trace)할 것인지 결정
    • 캐릭터가 공중에 잇을 땐 발 IK를 안 쓰고, 지면 위에서만 발 IK 사용 등 조건에 따라 사용 가능

"Locomotion" State Machine을 캐시 포즈로 저장

Locomotion cached pose 생성

"Main States" State Machine 설계

 

iamrain
@iamrain :: Annals of Unreal

iamrain 님의 블로그 입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차