bdfgdfg

Animation State패턴 본문

게임프로그래밍/Unity

Animation State패턴

marmelo12 2021. 8. 6. 15:31
반응형

Unity의 Animation은 Animator 컴포넌트를 통해 사용가능.

Animator에 애니메이터 Controller를 넣어줘야하고. 또 플레이어가 어떻게 애니메이션을 할지 컨트롤러에서 설정해줄 수 있다.

위와같이. 애니메이션을 넣어줄 수 있는 베이스 레이어가 존재하고. Entry는 시작부분.

처음에는 Run이란 애니메이션과 연결되어있으니 RUN 애니메이션을 진행.

 

하지만 RUN애니메이션만 진행할것은 아니기에. 애니메이션을 적절히 섞을 수 있는 Blend Tree를 이용.

블렌드 트리를 만들어주고 해당 노드가 만들어지면 더블클릭해 블렌드 트리에 넣을 애니메이션을 설정할 수 있는데.

RUN과 WAIT애니메이션을 두개 사용한다고 할 때, 파라미터를 float으로 넣어주고 WAIT은 0, RUN은 1이라는 값을 넣어준다.

 

그리고 이동을 할때 부드러운 움직임을 위해서 Lerp함수를 이용해 점점 1로 채워주고, 움직임이 멈출때 서서히 멈추기 위해 Lerp함수를 이용해 점점 0으로 채운다.

 

State 패턴

플레이어의 현재 상태를 enum으로 정의해준다.

public enum PlayerState
{ 
    Die,
    Moving,
    Idle,
    Channeling,
    Jumping,
    Falling
}
PlayerState m_state = PlayerState.Idle;

이렇게 정의된 플레이어의 상태를 Update문에서

 void UpdateDie()
 {
     // TODO 
 }
 void UpdateIdle()
 {
	// TODO 
 }
 void UpdateMoving()
 {
	// TODO 
 }
 void Update()
 {
     switch (m_state)
     {
         case PlayerState.Idle:
             UpdateIdle();
             break;
         case PlayerState.Die:
             UpdateDie();
             break;
         case PlayerState.Moving:
             UpdateMoving();
             break;
     
     }
 }

각각 현재 상태에따라 플레이어의 애니메이션 처리 + 이동등의 로직을 간편하게 처리할 수 있다.

 

물론 위의 코드적인 부분을 유니티의 애니메이터툴에서도 state를 관리할 수 있다.

해당 노드에서 Make Transition을 통해 다른 노드와 연결이 가능하다.

 

저렇게 연결된 노드들을 간선을 통해서 왔다갔다 할 수 있는데.

그렇게 하기위해ㅔ서 애니메이터 툴의 파라미터값을 이용.

float의 값을 가지는 speed로 사용하고.

간선을 클릭해 Conditions라는 탭에서 파라미터의 값을 통해 어떻게 현재 state(애니메이션)을 실행하거나 넘어갈지를 결정.

이렇게 0보다 크면 RUN, 1보다 작아지면 WAIT을 실행시키게 한다.

 

물론 이 파라미터(speed)값은 코드상에서 실행. (이때까지 한것은 어떻게 동작할지를 유니티툴에서 설정하고, 파라미터값만 그에 맞춰서 코드상에 설정)

 

 

반응형

'게임프로그래밍 > Unity' 카테고리의 다른 글

데이터 관리(Json)  (0) 2021.08.08
Coroutine(코루틴)  (0) 2021.08.08
투영  (0) 2021.08.05
Raycasting / LayerMask  (0) 2021.08.05
Input Manager / Resource Manager  (0) 2021.08.05
Comments