유니티에서는 애니메이션을 비교적 쉽고 빠르게 만들어 사용할 수 있다.
1. 애니메이터 컴포넌트 추가
애니메이션을 추가하는 방법의 첫번째는 애니메이션을 적용할 오브젝트의 컴포넌트에
Animator를 추가해야 한다.
2. 애니메이션 컨트롤러 추가
애니메이션을 총 관리, 감독을 할 컨트롤러가 필요하다.
프로젝트창에서 우클릭 -> Create -> Animation Controller 클릭하여 생성
이 컨트롤러를 애니메이터 컴포넌트의 컨트롤러에 등록해준다.
그리고 Animator 창에 들어가면 애니메이션을 관리, 감독할 수 있는 화면이 보이게 된다.
Animator창이 안보이면 Window->Animation->Animator
그럼 아래 사진처럼 애니메이션을 등록하여 적절히 화살표로 연결해주면 된다.
3. 애니메이션 등록
프로젝트창에서 우클릭 -> Create -> Animation 클릭하면 애니메이션을 만들 수 있다.
만들어진 애니메이션을 애니메이터창에 드래그 앤 드랍하면 애니메이션이 창 안에 들어가게 된다.
그리고 오브젝트를 클릭한 뒤 ctrl+6을 누르면 애니메이션을 설정할 수 있는 창이 생긴다.
Window->Animation->Animation으로도 창을 열 수 있다.
이 곳에서 내가 만들었던 애니메이션을 클릭하고 해당 애니메이션의 모션을 설정하면 된다.
Add Property를 클릭하여 다양한 요소들을 바꿀 수 있다.
오른쪽에서 흰 선을 조절하고 보석모양을 추가하면서 해당 시각에 특정 property의 값을 수정할 수 있다.
맨 마지막 보석 모양을 드래그로 움직이면 애니메이션 총 duration이 조절된다.
4. 애니메이션 연결
원하는 애니메이션을 만들었으면
다시 애니메이터창으로 돌아와서 Make Transition을 통해 적절히 애니매이션들을 이어준다.
5. 상세 설정
애니메이션의 순서도를 구성했으면 상세 설정에 들어가야 한다.
우선 애니메이션을 더블클릭하면 아래와 같은 창이 뜨는데 Loop Time이 켜져있으면 이 애니메이션이 다른 Transition이 일어나기 전까진 무한 반복 실행된다. 한 번만 실행할 거면 이 체크를 꺼줘야 한다.
또, 화살표를 더블클릭하면 아래와 같은 창이 뜨는데
Has Exit Time은 transition 조건이 만족되었을 때 현재의 애니메이션을 다 실행하고 transition을 할 건지, 아님 즉시 transition을 할 건지 정해주는 것이다. 체크를 풀면 transition 조건이 만족되자마자 바로 transition이 일어난다.
그리고 아래 Conditions탭이 바로 그 조건을 설정할 수 있는 창이다. 특정 애니메이션에서 다른 애니메이션으로 언제 넘어갈 것인지를 정해주는 곳이다.
애니메이터창의 parameters탭에서 이 조건에 등록할 여러 변수를 만들어낼 수 있다.
Float, Int, Bool, Trigger 타입의 파라미터를 설정할 수 있다.
예를 들어 캐릭터가 점프를 할때 점프 애니메이션이 나와줘야 하는데, 이때 Trigger를 이용하면 된다. Trigger는 발생시 transition condition을 만족하게 된다.
등록한 Trigger를 발생시키려면 C# 코드상에서 다음을 작성해주면 된다.
이때 SetTrigger의 인자로 내가 등록했던 트리거 파라미터의 이름을 전달해주면 된다.
public Animator padeAnim;
padeAnim.SetTrigger("PadeOut");
정리를 하자면 점프 애니메이션을 구현할 때
코드 상에서 점프 하는 명령과 함께 트리거를 발생시켜주면
현재 애니메이션에서 해당 트리거를 사용한 transition이 있다면 그 transition 화살표대로 다음 애니메이션으로 넘어가게 된다. 흠..뭔가 말로하기는 굉장히 어렵다..
아니면 점프가 끝나는 시간과 점프 애니메이션이 끝나는 시간을 맞춰주려면 bool타입의 파라미터를 transition의 condition으로 사용할 수 있다.
예를 들어 처음에 isGround = true였다가 점프하는 순간 false로 변경해주고 그에 맞는 조건을 transition에 잘 설정해주면 false로 바뀌는 순간 점프 애니메이션이 실행되게 할 수 있다.
그 후 다시 착지하여 isGround = true가 되면 다시 transition을 통해 원래의 애니메이션으로 돌아가는 것이다.
댓글