Unity 공부 (15)

도토코·2025년 3월 11일

Unity공부

목록 보기
15/22

Chapter 6

Animation Blending


블렌딩 트리

여러 애니메이션을 자연스럽게 전환하는 시스템으로 하나의 애니메이션 상태(State)이다.

  • 일반적으로 애니메이션을 사용하면 애니메이션이 딱딱하게 전환되는데, 블렌딩 트리를 사용하면 두 애니메이션이 자연스럽게 섞여 부드럽게 변환한다.
기능일반 TransitionBlend Tree
전환 방식단순한 애니메이션 변경애니메이션을 혼합하여 부드럽게 변화
사용 예시Idle → Walk → Run속도에 따라 자연스럽게 애니메이션 변화
장점간단하고 직관적자연스럽고 유연한 애니메이션 가능
단점전환이 딱딱할 수 있음설정이 상대적으로 복잡함

블렌딩 트리 만들기

이전과 같이 Animator에서 좌클릭을 하여 Create State를 클릭하고 From New Blend Tree를 클릭하여 만들어 주면 된다.

그럼 위의 사진과 같이 이전에 존재하던 5개의 State에 추가로 하나의 State가 추가된 것을 볼 수 있다. (이름을 WAIT_RUN으로 변경)

블렌딩 트리 작성

그런 후에 WAIT_RUN을 더블클릭하게 되면 아래와 같은 화면이 나오게 된다.

이제 Blend Tree를 좌클릭을 한후 Add Motion을 눌러 섞을 애니메이션 파일을 추가하여준다.

Add Motion을 하게 되면 Blend Tree의 Inspector의 Motion부분에 하나가 더 추가되는데 이런 식으로 추가하여도 되고 Inspector에서 직접 추가도 가능하다.

애니메이션 파일들을 섞을 기준이 될 Float타입의 파라미터 wait_run_ratio를 추가해준다.

그 이후에 Inspector의 Parameter부분을 방금 만든 wait_run_ratio로 변경해준다.

위의 사진과 같이 Motion에 지금 사용하는 RUN00_FWAIT00을 추가해준다.

  • WAIT00 의 Threshold값 = 0
  • RUN00_F 의 Threshold값 = 1

이렇게 하면 이 애니메이션은 WAIT00RUN00_F의 애니메이션 두가지를 섞은 애니메이션이 된다.

  • wait_run_ratio 값이 0에 가까울 수록 WAIT00 애니메이션의 비중이 커진다.
  • wait_run_ratio 값이 1에 가까울 수록 RUN00_F 애니메이션의 비중이 커진다.
  • wait_run_ratio 값이 0.5라면 절반이기에 반반씩 섞인 애니메이션이 재생된다.
  • wait_run_ratio의 값 변화는 코드에서 작성한다.

PlayerController.cs

    float wait_run_ratio = 0;

    void Update()
    {
        if (_moveToDest)
        {
            ...
        }

        if (_moveToDest)
        {
            wait_run_ratio = Mathf.Lerp(wait_run_ratio, 1, 10.0f * Time.deltaTime);
            Animator anim = GetComponent<Animator>();
            anim.SetFloat("wait_run_ratio", wait_run_ratio);
            anim.Play("WAIT_RUN");
        }
        else
        {
            wait_run_ratio = Mathf.Lerp(wait_run_ratio, 0, 10.0f * Time.deltaTime);
            Animator anim = GetComponent<Animator>();
            anim.SetFloat("wait_run_ratio", wait_run_ratio);
            anim.Play("WAIT_RUN");
        }  
    }
  • wait_run_ratio : Float 타입의 변수로, 대기(wait)와 달리기(run) 상태를 보간하는 비율을 저장한다.
    • 초기값은 0이며, Lerp()를 사용하여 점진적으로 0에서 1, 1에서 0으로 변경된다.

이동 중 O

  1. wait_run_ratio 값이 1에 가까워지도록 Lerp() 함수를 사용하여 보간한다.

    • 현재 wait_run_ratio 값에서 1로 점진적으로 변경된다.

    • 10.0f * Time.deltaTime 값이 커질수록 더 빠르게 1에 수렴한다.

  2. 보간된 wait_run_ratio 값을 애니메이션 파라미터로 설정한다.

    • wait_run_ratio를 Animator의 wait_run_ratio 파라미터에 적용한다.
    • 애니메이터에서 wait_run_ratio 값에 따라 블렌딩이 이루어진다.
  3. 애니메이션 블렌드 트리 "WAIT_RUN" 실행

이동 중 X

  1. wait_run_ratio 값이 0에 가까워지도록 Lerp() 함수를 사용하여 보간한다.

    • 현재 wait_run_ratio 값에서 0으로 점진적으로 감소한다.

    • 10.0f * Time.deltaTime 값이 크면 더 빠르게 0에 도달한다.

  2. 보간된 wait_run_ratio 값을 애니메이션 파라미터로 설정한다.

    • wait_run_ratio를 Animator의 wait_run_ratio 파라미터에 적용한다.
    • 애니메이터에서 wait_run_ratio 값이 점차 줄어들면서 블렌딩이 이루어진다
  3. 애니메이션 블렌드 트리 "WAIT_RUN" 실행


profile
코(딩)(꿈)나무

0개의 댓글