본문 바로가기

기초코딩강좌/유니티 기초 강좌

16. 애니메이션 블렌딩

반응형

애니메이션 블렌딩(Animation Blending)은 여러 애니메이션 클립을 조합하여 자연스러운 전환 및 중간 상태를 만들어내는 기술입니다. Unity의 Mecanim 시스템을 사용하면 애니메이션 블렌딩을 손쉽게 구현할 수 있습니다.

애니메이션 블렌딩에는 주로 두 가지 방법이 사용됩니다.

1. 레이어와 레이어 블렌딩:

  • 레이어(Layer): 여러 개의 애니메이션 레이어를 사용하여 각각 독립적인 애니메이션을 재생할 수 있습니다.
  • 레이어 블렌딩: 레이어 간의 블렌딩을 통해 각 레이어의 가중치를 설정하여 자연스러운 전환을 가능하게 합니다.
using UnityEngine;

public class LayerBlendingExample : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 예시: 이동 방향에 따라 "Run" 애니메이션과 "Rotate" 애니메이션을 블렌딩
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        // 이동 방향에 따라 가중치 설정
        float moveSpeed = Mathf.Clamp01(Mathf.Abs(horizontal) + Mathf.Abs(vertical));
        animator.SetFloat("Speed", moveSpeed);

        // 회전 방향에 따라 "Rotate" 애니메이션 블렌딩
        float rotateAngle = Mathf.Atan2(horizontal, vertical) * Mathf.Rad2Deg;
        animator.SetFloat("RotateAngle", rotateAngle);
    }
}

2. 블렌드 트리(Blend Tree):

  • 블렌드 트리: 여러 애니메이션 클립을 트리 구조로 구성하여 자연스러운 블렌딩을 구현합니다.
  • 각 노드는 입력 파라미터의 값에 따라 다른 애니메이션을 가중치를 조절하여 재생합니다.
using UnityEngine;

public class BlendTreeExample : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 예시: 이동 방향에 따라 "Run" 애니메이션과 "Rotate" 애니메이션 블렌딩
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        // 이동 방향에 따라 블렌드 트리의 가중치 설정
        animator.SetFloat("Horizontal", horizontal);
        animator.SetFloat("Vertical", vertical);
    }
}

 

애니메이션 블렌딩을 통해 캐릭터의 이동, 회전, 상태 전환 등을 부드럽게 제어할 수 있습니다.

 

Unity의 Mecanim 시스템은 이러한 기능을 쉽게 사용할 수 있도록 해주며, Animator 창에서 레이어와 블렌드 트리를 시각적으로 구성할 수 있습니다.

728x90
반응형

'기초코딩강좌 > 유니티 기초 강좌' 카테고리의 다른 글

18. 마무리 - 코딩 잘하는 방법  (0) 2024.01.07
17. 상태 머신  (0) 2024.01.06
15. 메카님 시스템  (1) 2024.01.04
14. 애니메이션 기초  (1) 2024.01.03
13. 충돌 감지와 반응  (0) 2024.01.02