Development/Unity Engine

[Retro유니티] FSM을 통한 Animator Controller 구현

사이바 미도리 2024. 11. 23. 14:13

FSM은 뭐 학부때 당연히 배우는 내용이니 넘어가고.

중요한건 유니티에서 어떻게 구현하느냐이다.

 

Animator Controller 란

- FSM을 사용해서, 재생할 Animation을 결정하는 State Graph를 표현하는 Asset이다.

Animator 란

- Animator Controller를 참고하여 Game Object에 Animation을 적용하는 Component이다.

 

Animator Controller는 Asset이고, Animator 는 Component 라는 점에 주의.

(게임에서 Animation을 재생하려면, 둘 다 필요하다.)

 

이전에 Run 애니메이션 클립을 만들 때, Player Animator Controller가 자동생성되었고,

또한 Player Game object에 Animator Controller Asset을 사용한 Animator Component가 자동추가되었다.

따라서 직접 Animator Controller를 생성할 필요가 없다.

 

자동생성된 Player Animator Controller 확인

 

Player 게임오브젝트에 추가된 Animator Component 확인

 

자, 이제 FSM을 확인하기 위해 Animator 창을 열어보자.

 

Animator Controller에는 기본적으로

Entry / Exit / Any State 가 있고,

Run / Jump / Die는 Animation Clip을 생성하면서 함께 생성된 state이다.

 

Exit 상태로 전이하면, Animator 동작이 완전히 종료되게 된다.

Any State 상태는, 현재상태가 무엇이든지 Dst 전이조건만 만족하면 Dst로 가게 만든다.

예를 들어, Die의 경우 Run에서도 가능하고 Jump에서도 전이가능하므로, 아싸리 AnyState에 넣어버린다.

 

 

이제 transition 조건을 추가하자. 이 조건은 Animator Controller의 Parameter를 사용해서 구성할 수 있다.

- Parameter: State Transition 조건으로 사용할 수 있는 수치. float / int / bool / trigger 가 있다.

 

Bool과 Trigger를 각각 클릭한다. 이름은 Grounded, Die로 설정한다.

 

Trigger타입의 파라미터는 다른 타입과 달리 특정 값을 할당할 수 없다. 단순히 Trigger를 Set 또는 Invoke 하는것만 가능하다.

Set하면 True가 되고, 곧바로 False가 된다.

지속적으로 어떤 수치를 비교하는게 아니라면, Trigger 파라미터를 쓰는게 좋다.

 

HasExitTime: 종료시점을 활성화하는 옵션.

=> HasExitTime이 true이고, 종료시점이 0.5(50%)로 설정되었다면,

Run->Jump 전이조건을 만족해도 Run 애니메이션 클립이 최소 50% 재생되어야만 전이가 이루어진다.

우리는 딸깍하면 바로 점프하길 원하므로, 해제했다.

 

TransitionDuration: 현재 Animation과 다음 Animation을 Blending하여 부드럽게 이어준다.

=> 2D Sprite Animation Clip에서는, 전환지속시간동안 Blending이 되지 않고 transition 시점만 전이된다.

(3D 모델과 다르게 관절이라는게 존재하지 않아서, 부드럽게 잇는게 불가능하기 때문)

따라서 지속시간의 값은 0으로 설정하였다.

 

마찬가지로, Jump->Run도 설정한다.

 

 

마찬가지로 Die 도 설정. 이 때는 Trigger로 Die를 설정함에 유의한다.

 

 

 

정리

1. Animator Controller를 사용하면, FSM으로 Animation을 결정할 수 있다.

2. Animator Component는, Animator Controller를 사용해서 Animation Clip을 재생하는 Component이다.

3. Animator에서 Trigger 타입 Parameter를 사용할수있다.

<= C# Script에서, Set 계열 메서드로 Animator component 의 Parameter에 값을 할당할수있다(다음글 참조)