애니메이션을 구현하다보면, 단계별로 진행되는 애니메이션이 아니라 말그대로 특정 조건을 만족하기만 하면 애니메이션을 재생하도록 설정하고 싶은 경우도 있다.
피격 모션이나, 죽을 때 애니메이션과 같은 경우가 그것이다.
해당 기능들을 구현하기 위해 쓰는 각 State와 Transition들에 대해 알아볼 것이며, 예시로 State Diagram을 어떻게 구성하는지 소개할 것이다.
애니메이터 State
애니메이터를 더블클릭하면 나오는 Animator 창에서 State의 구성을 볼 수 있다.
각 블럭 하나하나가 State이다.
주황색 블록과 짙은 회색의 블록들은 내가 추가한 Animation을 재생하는 State이고, 나머지는 특수한 조건을 구현하기 위한 특수 State들이다.
Transition
한 State에서 다른 State로 넘어갈 때의 조건을 결정해주는 것을 Transition
이라 한다.
우클릭해서 Make Transition
을 할 수 있다.
조작할 수 있는 다양한 Property
를 두어
State를 다양한 모양으로 넘어갈 수 있도록 설정을 해줄 수 있다.
Parameters
Transition을 언제 할 지 조건을 두는 Property이다.
먼저 Animator 창의 Parameters에서 파라미터를 먼저 추가하자.
Parameter에는 Float
, Bool
, Int
, Trigger
가 있다.
Bool
과 Trigger
가 뭐가 다르냐면,
Bool
은 값을 바꾸면 그 파라미터 값이 계속 유지가 된다.
근데 Trigger
의 경우는 이걸 켜면(true
) Transition이 이루어지고,
Transition이 되고 나면 바로 꺼져버린다(false
).
Conditions
파라미터를 추가하고 나면 다음과 같이 비어 있는 Condition에 Condition을 추가해줄 수 있다.
이렇게 설정하면 State 0 → State 1
Transition이라고 했을 때
State 0
에서 IsMove
가 true
이면 State 1
로 넘어가게 된다.
다음과 같이 여러 조건을 넣을수도 있는데 이 경우 List에 있는 조건들을 모두 만족해야 Transition을 수행한다!
Settings
Transition에 걸어주는 여러 옵션들이다.
Has Exit Time
: Transition 수행 전에 기존 State에서 나가는 시간, 즉 딜레이를 둘 것인지를 설정한다.
Exit Time
: Conditions를 만족했을 때 Transition 수행 전에 주어지는 딜레이다.
Transition Duration
은 애니메이션 간의 부드러운 전환을 위한 시간 값이다.
Transition Duration
이 0보다 길면
해당 시간만큼 A → B로 부드럽게 전환이 된다.
3D에서는 애니메이션을 메카님 시스템과 같은 것을 사용할 때 주로 쓰지만, 2D에서는 Sprite 변화로 애니메이션을 구현하기 때문에 잘 사용하지 않는다.
Fixed Duration
: true면 Duration을 초(s)로 설정하고, false면 퍼센트(%)로 설정한다.
Transition Offset
: Transition 시 다음 State의 Animation을 언제 Play 할 것인지에 대한 값이다.
Interruption Source
: 전환이 중단될 수 있는 상황을 만드는 것이다.
전환 중단에 대해선 다음 문서를 참고하자.
특수 State들
Entry, Exit
특수 State들을 이해하기 전에 먼저 알아야 하는 애니메이터의 흐름이라는 것이 있는데,
애니메이터의 한 흐름은
Entry
에서 시작되어 이런저런 State들을 넘나들다가,
Exit
로 가면 한 흐름이 끝나는 것이다.
흐름이 끝나면 어떻게 되나요?
그냥 다시 Entry
에서 다시 시작된다.
Entry
에서 시작되면
바로 Default State로 설정되어 있는
주황색 블록으로 넘어가게 되는데,
Default State를 바꾸고 싶다면
다른 State를 우클릭해
Set as Layer Default State
를 클릭하면 된다.
Any State
Any State는 말그대로 지금 현재 어떤 State에 있는지 상관 없이 넘어가고 싶은 State를 연결하는 State이다.
만약 위와 같이 연결되는 Transition들이 모두 같은 Condition이라면, 다음과 같이 훨씬 간단하게 만들 수 있다.
Any State
를 위한 파라미터는
주로 Trigger
를 사용하게 된다.
예시) 기본, 달리기, 피격 상태 구현
예시1. Any State의 Can Transition To Self 사용
다음과 같이 구현할 수 있다.
Any State → HURT
의 조건을 bool
로 했는데,
이 경우 Die = true
로 하면
HURT → HURT
Transition도 계속 발생하기 때문에
HURT 애니메이션의 첫 프레임만 반복해서 보이는 문제점 이 있다.
이는 자기 자신으로의 Transition을 허용하는 옵션인
Can Transition To Self
를 false
로 해주면 문제가 해결된다.
예시 2. Trigger 사용
bool 값을 쓰지말고 Trigger를 사용하는 것이 조금 더 편하긴 하다.
예시 3. Exit 활용
위 예시 1에서 Any State → HURT
로 간 후
HURT → IDLE
로 빠져 나가도록 할 수 있지만,
Exit에 연결해줘도 된다.
이렇게 되면 HURT
애니메이션 재생 후 Exit
로 나가고,
다시 Entry
로 들어와 IDLE
이 재생되게 할 수도 있다.
이 때 HURT → Exit
Transition에 약간의 Exit Time을 두는 것이 좋다.
Uploaded by N2T
'개발 > Unity 내일배움캠프 TIL' 카테고리의 다른 글
Unity에서 짐벌 락 (Gimbal Lock) 관찰하기 (0) | 2023.09.15 |
---|---|
Unity 코루틴(Coroutine)으로 딜레이 구현하기 (1) | 2023.09.14 |
Unity2D 레이캐스트 (Raycast) (0) | 2023.09.12 |
Unity2D 월드 좌표계 vs 로컬 좌표계 (0) | 2023.09.11 |
Unity 오브젝트 풀 (0) | 2023.09.08 |