Dev./UE 언리얼 엔진

[TIL250210_1] State Machine 설계를 통한 캐릭터 동작 애니메이션 적용

raindrovvv 2025. 2. 10. 21:24

💭회고

State Machine을 활용한 캐릭터 동작 애니메이션 적용에 대해 학습했다.특히 애니메이션 블루프린트의 개념, 캐릭터 이동 상태 감지, State Machine 설계를 중심으로 실습을 진행했다. 그리고 Blend Space와 캐싱된 포즈 활용이 퍼포먼스 최적화에 큰 도움이 된다는 점을 확인했다.다음에는 공격 모션과 상호작용 애니메이션을 추가하는 방향으로 학습을 해보면 좋을 거 같다.

🗺️마인드맵

📒학습 내용

1️⃣ 애니메이션 블루프린트 이해하기

✅ 애니메이션 블루프린트 (Anim Blueprint)란?

  • 스켈레탈 메쉬(Skeletal Mesh) 기반 캐릭터 애니메이션을 제어하는 블루프린트
  • State Machine 및 블렌딩(Blend)을 활용하여 동작 간의 전환을 설정할 수 있음
  • 이벤트 그래프(Event Graph)에서 캐릭터의 속도, 점프 여부 등의 변수를 활용해 애니메이션을 동적으로 변경 가능

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

  1. Content Browser에서 우클릭 → Animation → Animation Blueprint 생성
  2. 스켈레톤(Skeleton)을 선택하여 블루프린트 생성
  3. Anim Graph에서 기본적인 Output Pose 연결
  4. Event Graph에서 이동 데이터를 받아올 수 있도록 캐릭터 Movement Component와 연동

📌 애니메이션 블루프린트는 캐릭터의 모든 애니메이션 상태를 관리하는 중추적인 요소이다!


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

✅ 캐릭터 Movement Component 변수화

  • Movement Component는 캐릭터의 이동 속도, 점프, 낙하 여부 등의 데이터를 제공
  • 애니메이션 블루프린트와 연동하기 위해 Movement Component 변수를 선언

✅ 구현 과정

  1. Event BlueprintInitializeAnimation 노드를 추가하여 초기화 시 Movement Component 가져오기
  2. `Get Owning Actor` 노드로 현재 애니메이션을 재생 중인 `액터`를 가져온다.
  3. 캐릭터는 액터의 자손이지만, 우리가 필요한 것은 캐릭터의 `Character Movement` 이므로 캐릭터로 캐스팅해준다.
  4. 캐릭터를 변수로 승격해준다.
  5. 캐릭터에서 Get Charater Movement한다.
  6. `CharacterMovement`도 변수 승격(선언)하고 `Get Character Movement` 노드를 활용해 값 저장

3️⃣ Locomotion State Machine 설계하기

✅ State Machine이란?

  • 캐릭터의 현재 상태를 기준으로 애니메이션을 전환하는 구조
  • 예: Idle(정지) → Walk(걷기) → Run(뛰기) → Jump(점프) 등으로 상태가 변경됨

✅ Locomotion State Machine 설계 과정

  1. State Machine 추가 → Locomotion이라는 이름 설정
  2. Idle, Walk, Run 상태 생성 및 전환 설정
  3. Blend Space 연결 → 이동 속도에 따라 자연스럽게 애니메이션 변경
// 전환 조건 설정 (Blueprint)
bShouldMove = GroundSpeed > 3.0f;

📌 State Machine을 활용하면 복잡한 애니메이션 전환을 직관적으로 관리할 수 있음!


4️⃣ Main States State Machine 설계하기

✅ Main States 개념

  • 이동(Locomotion) 뿐만 아니라 점프, 착지, 추락 등의 상태를 추가적으로 관리하는 State Machine
  • Locomotion을 포함한 상위 개념의 State Machine으로 구성됨

✅ 구현 과정

  1. Main States State Machine 생성 → Locomotion을 캐시 포즈로 저장하여 재활용
  2. 점프, 착지, 추락 상태 추가 → bIsFalling, bIsJumping 변수를 활용해 상태 전환
  3. State Transition Rule 설정 → 자동으로 애니메이션이 전환되도록 로직 구현

📌 이 방식은 실제 게임 개발에서 가장 많이 사용되는 구조이며, 확장성이 뛰어남!


5️⃣ 현업에서 자주 사용되는 최적화 기법

✅ Blend Space 활용

  • 이동 속도에 따라 걷기/달리기 애니메이션을 부드럽게 전환하는 기법
  • 캐릭터 애니메이션의 부자연스러운 전환을 방지하고 자연스럽게 표현 가능

✅ 캐싱된 포즈(Cached Pose) 사용

  • 자주 사용하는 State Machine을 캐싱하여 연산 비용 절감
  • 예: Locomotion State Machine을 캐시 포즈로 저장하여 다른 State에서 재사용

✅ Control Rig을 활용한 IK 적용

  • 발이 지형에 맞게 자동으로 조정되도록 하는 기능
  • IK(Foot Placement)를 적용하여 언덕이나 계단에서도 자연스러운 동작 가능
캐릭터가 제자리 걸음만 하는 문제 발생🚨🚨🚨
: 스타터팩에서 제공하는 IK를 사용해서 발생했던 문제...
IK 노드를 끊고 해보니 문제 해결함.

➡️애니메이션 리타겟터처럼 이 에셋을 재활용할 방법이 있지 않을까 찾아봐야겠다!

 

🟣오늘의 옵시디언 현황