객체가 여러 개의 상태(State)를 가지며, 특정 조건에 따라 상태가 전환(Transition)되는 구조를 의미한다.

위의 사진과 같이 Transition을 사용하여 애니메이션의 전환이 일어난다.
이 속성은 애니메이션 상태 A에서 상태 B로 전환할 때 사용되는 설정이다.
Idle상태에서 Running상태로 전환하는 경우와 같이, 애니메이션 간의 흐름을 결정하는 것.

Has Exit Time (종료 시전 사용 여부)

상태 전환이 이루어지기 전에 애니메이션이 끝날 때까지 기다릴지 여부 확인
활성화 X : 전환이 즉시 일어난다.
활성화 O : 현재 상태가 끝날 때까지 기다리고, 이후 exit time에 정의된 시간에 따라 전환이 시작된다.
Exit Time (종료 시점)

RUN상태에서 WAIT상태로 블렌딩되듯이 전환이 일어나고 있는 것을 볼 수 있다.

Interruption Source (중단 소스)
None : 아무런 중단 없이, 현재 상태가 전환되는 것을 그래도 유지한다.
Next State : 현재 애니메이션이 중단되고, 다음 상태가 바로 실행된다.
Current State : 현재 상태에서 다시 시작하도록 설정한다. 이 경우 현재 상태가 중단되고, 즉시 재시작된다.
Condition (전환 조건)
상태 전환이 어떤 조건에서 이루어져야 할지를 설정한다.
조건 : 파라미터 (Parameter) 를 기반으로 전환 조건을 설정한다.
IsWalking이 true일 때 Idle상태에서 Moving 상태로 전환JumpTrigger가 활성화되면 Idle상태에서 Jump 상태로 전환Idle 상태에서 Moving 상태로 전환Condition
Animator의 Parameters에 float타입으로 speed라는 변수를 만들어주고 난 후에,
RUN -> WAIT (Transition)

WAIT -> RUN (Transition)

위와 같이 각각의 Transition에서 둘 다 Has Exit Time을 꺼주고 Condition을 설정해주었다.
void UpdateMoving()
{
Vector3 dir = _destPos - transform.position;
if(dir.magnitude < 0.0001f)
{
_state = PlayerState.Idle;
}
else
{
float moveDist = Mathf.Clamp(_speed * Time.deltaTime, 0, dir.magnitude);
// 1번 방법
// if (moveDist > = dir.magnitude)
// moveDist = dir.magnitude
transform.position += dir.normalized * moveDist;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 20 * Time.deltaTime);
}
// 애니메이션
Animator anim = GetComponent<Animator>();
//현재 게임 상태에 대한 정보를 넘겨준다.
anim.SetFloat("speed", _speed);
}
void UpdateIdle()
{
// 애니메이션
Animator anim = GetComponent<Animator>();
anim.SetFloat("speed", 0);
}
위와 같이 코드르 작성해준다.
//애니메이션이라고 적혀있는 곳을 잘 보면
이렇게 스크립트에서 애니메이션 파라미터 값을 설정할 수가 있다. 이 파라미터 값의 변화에 따라 전이 Condition 조건식이 만족하여 전이가 일어나게 된다.