본문 바로가기
🌐 유니티 (Unity)

Day 66 - Unity Blend Tree를 활용한 애니메이션 전환 🎧

by shin0707 2025. 1. 12.
728x90
반응형
728x90

  • 주제

>>  Blend Tree란?

>>  Blend Tree 생성하기

>>  Blend Tree의 동작 방식

>>  Blend Tree 고급 설정

>>  Blend Tree를 활용한 사례

>>  Blend Tree의 최적화 팁

 


  • 공부내용

Unity의 Blend Tree는 다양한 애니메이션을 매끄럽게 전환하고 캐릭터의 움직임을 자연스럽게 표현할 때 사용된다.

이번 게시글에서는 Blend Tree를 설정하고 최적화하는 고급 방법을 소개한다.

 

1. Blend Tree란?

Blend Tree는 Animator 상태 머신에서 여러 애니메이션 클립을 속성 값(Parameters)에 따라 혼합(Blend)하여 전환할 수 있는 기능이다.

주로 속도, 방향, 높이 등과 같은 변수에 따라 자연스러운 움직임을 구현할 때 사용된다.

 

1-1. 활용 예시

  • 캐릭터가 걷기에서 뛰기로 전환할 때 속도에 따라 자연스럽게 변화.
  • 비행기가 수평 비행에서 상승 비행으로 전환.

 

2. Blend Tree 생성하기

 

2-1. Blend Tree 상태 추가

① Animator 창에서 새로운 상태를 생성한다.

② 상태 이름을 설정한 후, 오른쪽 클릭 > Make Blend Tree를 선택한다.

 

2-2. Blend Tree 편집

① 생성된 Blend Tree 상태를 더블 클릭하여 Blend Tree Editor를 연다.

② Add Motion Field를 클릭하여 애니메이션 클립을 추가한다.

③ Blend Tree의 Parameter를 설정하여 전환 기준을 정의한다. (예: `Speed`)

 

2-3. Blend Tree Parameter 연결

① Animator의 Parameters 탭에서 Float Parameter를 추가한다.

- 예: `Speed`

② Blend Tree의 축(Blend Axis)을 해당 Parameter로 설정한다.


 

3. Blend Tree의 동작 방식

3-1. 단일 Blend Axis

- Parameter 하나를 기준으로 애니메이션 전환.

- 예: `Speed`에 따라 Idle ➔ Walk ➔ Run

 

3-2. 2D Blend Axis

- 두 개의 Parameter를 기준으로 애니메이션 전환.

- 예: `Speed`와 `Direction`에 따라 360° 방향 전환 구현.

 

3-3. 동작 예제

- Blend Tree에 속도 기반 애니메이션 추가:

Speed = 0.0: Idle

Speed = 2.0: Walk

Speed = 5.0: Run

 

4. Blend Tree 고급 설정

 

4-1. Threshold 값 수동 조정

애니메이션 간의 전환 속도와 Threshold 값을 수동으로 설정하여 전환 효과를 세밀하게 조정한다.

 

4-2. Automatic Threshold 비활성화

Unity는 기본적으로 Threshold를 자동으로 설정한다. 하지만 복잡한 전환이 필요한 경우 직접 설정하는 것이 더 유리하다.

 

4-3. Blend Type 변경

Blend Tree의 Blend Type을 변경하여 애니메이션 혼합 방식을 조정한다.

- Simple Directional: 단일 Parameter.

- Freeform Cartesian: 2D 공간에서 자유로운 전환.

- Freeform Directional: 각도 기반 전환.

 

4-4. Normalized Time 사용

각 애니메이션 클립의 Normalized Time을 활용하여 재생 속도를 동기화한다.


 

5. Blend Tree를 활용한 사례

 

5-1. 캐릭터 이동 애니메이션

using UnityEngine;

public class CharacterMovement : MonoBehaviour
{
    public Animator animator;
    private float speed;

    void Update()
    {
        // Speed 계산
        speed = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).magnitude;

        // Animator에 Speed 전달
        animator.SetFloat("Speed", speed);
    }
}

 

 

5-2. 비행기 방향 전환 애니메이션

using UnityEngine;

public class AircraftController : MonoBehaviour
{
    public Animator animator;
    private float pitch; // 상승/하강
    private float roll;  // 좌우 회전

    void Update()
    {
        // 입력 값 가져오기
        pitch = Input.GetAxis("Vertical");
        roll = Input.GetAxis("Horizontal");

        // Animator에 값 설정
        animator.SetFloat("Pitch", pitch);
        animator.SetFloat("Roll", roll);
    }
}

 

6. Blend Tree의 최적화 팁

 

- Parameter 개수 최소화

필요한 Parameter만 사용하여 Blend Tree의 복잡도를 줄인다.

 

- Threshold 범위 조정

Threshold 범위를 실제 사용 가능한 값에 맞게 설정하여 전환 성능을 개선한다.

 

- Blend Tree 분리

너무 복잡한 Blend Tree는 여러 개로 나누어 관리한다.

 

- Transition 설정

Blend Tree 상태 전환 시 Transition Duration을 최적화하여 끊김 없는 애니메이션을 구현한다.

 


<마무리>

 

Blend Tree는 Unity 애니메이션 시스템에서 복잡한 상태 전환을 매끄럽게 처리할 수 있는 강력한 도구이다.

단일 Parameter와 다중 Parameter를 활용한 Blend Tree 설정 방법을 익히고,

Threshold와 Transition을 세밀하게 조정하면 더욱 자연스러운 애니메이션을 구현할 수 있다.

728x90
반응형

loading