본문 바로가기
유니티 공부/Unity

Unity - Animation 기초, Aniamtion Blending

by 코딩하는 돼징 2023. 2. 14.
반응형

1. Animator

애니메이션을 제어하는 컴포넌트 중 하나이다. 게임 오브젝트에 추가하여 애니메이션의 상태와 전환을 관리한다.

01 Animator Controller

애니메이션 상태와 전환을 조직화하고 관리하는데 사용되는 객체이다. 

02 Avator

3D모델의 뼈대 및 관련 스킨 Mesh정보를 저장하는데 사용된다.


2. Humanoid Avator

신체 부위별로 뼈대와 관절을 정의하며 정말 Human과 유사한 신체 구조를 가지고 있다. 이를 사용하게 되면 신체 부위별 관절 단위로 움직이게 할 수 있다.


01 코드상에서 애니메이션 사용해보기

PlayerController.cs

void Update()
{
    if (_moveToDest)
    {
        Animator anim = GetComponent<Animator>();
        anim.Play("RUN");
    }
    else
    {
        Animator anim = GetComponent<Animator>();
        anim.Play("WAIT");
    }
}

Alt + 화면을 누르면 화면이 움직인다.


Aniamtion Blending

3. 블랜딩 트리 만들기

추가 된 것을 확인 한 후 더블 클릭하면 밑에 그림 처럼 Blend Tree안으로 들어갈 수 있다.

BlenTree에서 마우스 우측을 클릭하면 Add Motion을 통해서 blend할 애니메이션 파일을 추가할 수 있다.

 

Parameter을 wait_run_ratio의 비율에 따라 두 애니메이션을 섞을 수 있다.

Parameter부분을 클릭하면 Threshold부분 혹은 왼쪽 창에서도 수정할 수 있다.

0에서 가까울 수록 wait_00 애니메이션 비중이 높아지고 1에서 가까울 수록 Run_F 애니메이션 비중이 높아진다.


그러므로 자연스럽게 멈추기 위해서는 1에서 0으로 사용하면 된다.

PlayerController.cs

float wait_run_ratio = 0;

void Update()
{
 if(_moveToDest)
 {
     wait_run_ratio = Mathf.Lerp(wait_run_ratio, 1, 10.0f * Time.deltaTime);
     anim.SetFloat("wait_run_ratio", 1);
     anim.Play("WAIT_RUN");
 }
 else
 {
     wait_run_ratio = Mathf.Lerp(wait_run_ratio, 0, 10.0f * Time.deltaTime);
     anim.SetFloat("wait_run_ratio", 0);
     anim.Play("WAIT_RUN");
 }

01 _moveToDest가 True인 경우(이동중일때)

wait_run_ratio값을 부드럽게 1으로 수렴 시킨다. 이는 0에서 1로 점차 변화하면서 중간 값들을 가진다. 이를 반복하게 되면 해당 중간값들에 해당하는 BlendTree 애니메이션이 재생된다.


02 _moveToDest가 False인 경우(이동중이 아닐때)

wait_run_ratio값을 부드럽게 0으로 수렴 시킨다. 이는 0에서 1로 점차 변화하면서 중간 값들을 가진다. 이를 반복하게 되면 해당 중간값들에 해당하는 BlendTree 애니메이션이 재생된다.

 

 

 

 

 

 

 

 

참고 :  본 내용은 MMORPG  PART3 강의를 수강하여 작성하였습니다.

https://www.inflearn.com/course/mmorpg-%EC%9C%A0%EB%8B%88%ED%8B%B0/dashboard

 

 

반응형

댓글