- 주제
>> 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을 세밀하게 조정하면 더욱 자연스러운 애니메이션을 구현할 수 있다.
'🌐 유니티 (Unity)' 카테고리의 다른 글
Day 68 - 유니티에서 시간을 멈춰도 코루틴이 작동하게 하는 방법 🎮 (66) | 2025.01.22 |
---|---|
Day 67 - Trigger와 Collision2D 활용 및 아이템 획득 & 피해 처리 구현 (37) | 2025.01.16 |
Day 65 - Unity Animator 효율적으로 관리 - Enum 활용 🎥 (26) | 2025.01.08 |
Day 64 - Unity 텍스트 색상 변경 및 기본 기능 확장 방법 🎨 (34) | 2025.01.04 |
Day 63 - Firebase 쿠폰 관리 (53) | 2024.12.31 |