졸업프로젝트

[유니티] 특정 조건일 때 애니메이션 전환하기

yekim8 2021. 6. 18. 22:40

유니티로 졸업프로젝트를 진행하면서 특정 조건에 따라 애니메이션을 바꿔줘야했는데 애니메이션을 바꾼 방법에 대해서 적어보려고 한다. 우선 애니메이션을 변경하기 위해 당연히 애니메이터가 필요하다.

Asset에서 마우스 우클릭으로 애니메이터 컨트롤러를 만들 수 있다. 프로젝트를 할 때 우리는 기존에 존재하는 에셋을 샀기 때문에 필요한 애니메이션만 골라서 컨트롤러에 넣어주었다.

 

이때 Entry가 처음 시작이고 각 화살표 방향으로 애니메이션이 바뀌게 된다.

 

저 화살표를 Transition이라고 한다. Transition은 바꾸기 원하는 애니메이션(A)에서 우클릭을 누르고 Make Transition 선택 후 다음 애니메이션(B)을 클릭하면 해당 애니메이션으로의 transition(A->B)이 생긴다.

근데 이때 Transition만 만들게 되면 해당 애니메이션이 한 번만 플레이되고 바로 다음 애니메이션으로 넘어간다. 특정 상황에서만 애니메이션이 바뀌는 것을 원했기 때문에 각 transition에 조건을 추가해주었다.

 

여기 이 애니메이터 창에서 왼쪽 위 Parameters 창을 눌러준다.

 

그럼 이런 창이 뜨는데 아무것도 추가해주지 않았다면 목록이 비어있을 것이다. 여기에 원하는 방식의 조건을 추가해줄 수 있다. 오른쪽의 +버튼을 누르면 Float, Int, Bool, Trigger 이렇게 네 가지 항목이 존재한다. 이 넷 중에 조건으로 원하는 것을 선택해주면 되는데 예를 들어, 나는 ButtonPush라는 이름의 Bool parameter를 만들었다. 그리고 이 ButtonPush가 참일 때만 CorgiWalk에서 CorgiEat으로 애니메이션이 바뀌게 설정했다. 이를 확인하기 위해 CorgiWalk에서 CorgiEat으로 가는 transition을 눌러보면 이런 인스펙터 창이 뜬다.

 

CorgiWalk에서 CorgiEat으로 가는 transition의 인스펙터

오른쪽에 Conditions 부분에 ButtonPush가 true로 설정된 것을 알 수 있다. 이것은 애니메이터의 ButtonPush라는 parameter가 참일 때만 애니메이션이 바뀐다는 것을 의미한다. 동시에 여러가지 조건을 주고 싶다면 아래에 +버튼을 눌러서 조건을 더 추가해줄 수 있다. 만약 parameter를 float으로 설정한다면 속도가 얼마 이상일 때 애니메이션을 바꾸게하는 등의 설정도 가능하다. 이런 식으로 애니메이터를 세팅해놓으면 실제 코드에서 parameter를 변경해줄 수 있다.

 

간단한 예시를 위해 코드를 하나 작성했다.

Animator를 코드에 추가해주고 처음 부분에 SetBool 함수를 통해 ButtonPush parameter는 false 상태로 시작할 수 있게 했다. 애니메이터의 다른 파라미터도 마찬가지로 바꿀 수 있다. SetInt, SetFloat 명령어와 parameter명, 값을 넣어주면 해당 parameter가 세팅된다.

이 코드 상에서는 버튼을 누르면 ButtonPush가 true가 되도록 설정했다.

 

Hierarchy 창에 GameObject를 하나 추가하고 여기에 작성한 코드를 넣어주었다. Corgi와 Button도 넣고 Corgi에는 아까 만들어두었던 Animator를 넣어준다.

 

버튼의 On Click으로 buttonPush 함수를 넣어줬다.

 

 

처음에는 걷고 있던 강아지가 버튼을 누르면 먹는 모션을 취한다. 이 방식을 사용하여 프로젝트에서는 애니메이션을 컨트롤했다. 그래도 초반 코드가 너무 비효율적인 부분이 있어서 고치고 싶긴 하다... 이 방법만 사용한다고 애니메이션을 원하는 대로 설정할 순 없었어서 조건 설정을 잘해주는게 중요하고 또 애초에 애니메이터를 만들 때부터 효율적으로 만들 수 있는 방법을 생각하고 시뮬레이션을 해본다음에 만들면 더 좋을 것 같다.