Chapter 6-4. 애니메이션 : State Machine

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

Chapter 6. 애니메이터

🚀 State Machine

State 패턴과 관련이 깊다. 어떤 상태이냐에 따라 재생시킬 애니메이션이 다르다. State Machine 에서 하나의 State 는 하나의 Animation 클립에 대응한다.

  • 다른 상태로 바뀌는 전이
    • 화살표로 이어주기만 하면 된다.
    • 화살표에서 Condition 에서 그 전이 조건을 설정할 수 있다.
      • Parameter 값을 조건식에 이용한다.

✈ Transition

Has Exit Time 外

image

  • 그래프를 보면 RUN 상태(애니메이션)에서 WAIT 상태로 블렌딩 되듯이 전이가 일어나는 것을 볼 수 있다.
    • 위 파란색 범위를 조절하여 설정할 수 있다. 이 범위가 좁을 수록 블렌딩이 적고 RUN 끝나자마자 바로 WAIT 이 재생되서 부자연스러울 수 있음
  • Has Exit Time 애니메이션 재생 종료 후 다음 전이로 이동한다. (Condition 조건에 따라 전이 되는게 아님)
    • 체크 👉 종료 시점이 존재하게 되는 것.
      • Settings 의 Fixed Duration이 체크되어 있다면 Exit Time 값이 “시간”으로 해석된다. Exit Time 값이 0.7 이고 Has Exit TIme이 체크되어 있다면 절대적인 “0.7초”의 시간 후에 다음 전이가 일어난다.
      • Settings 의 Fixed Duration이 체크되어 있지 않다면 Exit Time 값이 “% 비율”로 해석된다. Exit Time 값이 0.7 이고 Has Exit TIme이 체크되어 있다면 “해당 애니메이션의 전체 재생 길이의 70 %”까지만 재생한 후에 다음 전이가 일어난다.
    • 체크 해제 👉 애니메이션이 다 재생 되더라도 전이가 일어나지 않는다.
      • 전이가 일어나려면 Contidion 조건을 만족해야 한다.
      • 따라서 파라미터 값으로 Condition 조건을 통해 전이가 즉각 일어나게 하려면 Has Exit Time 을 체크 해제해주어야 한다.

블렌딩 Has Exit Time 이걸 체크하면 이다. Exit Time 비율만큼 애니메이션 재생 후 다음 상태로 전이된다. 체크 해제 하면 전이 조건을 만족해야만 즉시 전이가 이루어진다. 전이 조건이 만족될 때 즉각 재생되게 하고 싶으면 이게 체크 해제되어야 한다.

image

image

“RUN 👉 JUMP”, “RUN 👉 WAIT” 두 전이 모두 다 Has Exit Time이 체크되어 있다는 가정하에, 현재 전이 순서가 위와 같기 때문에 “RUN 👉 JUMP”이 먼저 실행되게 된다. 만약 “RUN 👉 JUMP” 전이는 Has Exit Time이 체크되어 있지 않다면 “RUN 👉 WAIT”가 실행될 것이다.

  • 여담으로 애니메이션 자체가 계속 반복 실행되는 경우는 해당 애니메이션 상태가 loop Time 속성이 체크되어 있어서 그렇다.

image

  • Transition Duration이 바로 이 블렌딩 되는 파란색 범위 구간이다. 이 지연시간이 길면 길수록 자연스럽고 짧으면 짧을수록 애니메이션이 즉각즉각 바뀐다.

파라미터 사용

Animator anim = GetComponent<Animator>();
anim.SetFloat("speed", _speed);

이렇게 스크립트에서 애니메이션 파라미터 값을 설정할 수가 있다. 이 파라미터 값의 변화에 따라 전이 Condition 조건시기 만족하여 전이가 일어나게 된다.

  • 여담으로 실무에선 기본적인 움직임 동작은 State Machine 에서, 스킬 애니메이션은 어마어마하게 다양할 수 있기 때문에 따로 블렌딩 트리로 묶어 작성하는 식으로 작업 한다고 한다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 2 카테고리 내 다른 글 보러가기

댓글 남기기