유니티:애니메이션
- 유니티:개요
- 유니티:기본 조작
- 유니티:카메라
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티:UI
- 유니티:게임 내 화면
- 유니티:플레이어
- 유니티:맵
- 유니티:씬
- 유니티:몬스터
- 유니티:아이템
- 유니티:음향
- 유니티:빌드
- 유니티:VR
- 유니티:팁
개요
캐릭터가 움직일 때, 점프할 때, 가만히 있을 때의 몸동작이 달라져야 한다. 이를 구현하기 위한 지식.
이 애니메이션들도 역시 스크립트로 제어한다.
방법
- 애니메이션 추가.
- - 프로젝트 창에서 Create>Animator Controller로 애니메이터 컨트롤러 선택.(Controller는 애니메이션 상태도를 저장하는 에셋이다.)
- - (???)애니메이션들을 하이어라키 창의 대상에 드래그해 넣는다.(애니메이터에서 추가된 애니메이션들을 볼 수 있다.)
- 애니메이터 열기.
- - 애니메이션을 다루는 창을 연다.(window > animation > animator)
- 파라미터 추가.
- - 어떤 상태를 판단하는 변수를 추가하는 과정이다. 이 변수는 스크립트에서 다룬다.
- - 애니메이터의 파라미터 창에서 +를 눌러 판단요소를 추가한다.(요소의 스크립트에서 사용할 이름과 똑같이 맞춰야 한다.)
- - 애니메이터의 파라미터에서 추가하면 변수타입을 추가할 수 있다. 특정 상태에서 다른 상태로 변화를 주고자 할 때 변수가 특정 값을 가질 때 state가 변하게 할 수 있다.
- - 변수를 bool형식이 아니라, int형식으로 바꾸면 다양한 상태로의 분기를 만들기 쉽다.
- -- 스크립트에서 파라미터 조작하기.
- 클래스에서 전역변수를 정의한다. Animator 변수명; //파라미터를 가져온다. 함수 내에서 변수명 = GetComponent<Animator>(); 변수명.SetBool("애니메이터 안의 매개변수명", 지정할 값); //이 형태로 특정 상태가 발생했을 때 애니메이터 매개변수값을 바꿀 수 있다.(SetTrigger는 값이 없으니, 키만 주면 된다.)
상태바꾸기를 통해 피격이나 공격이나 다양하게 변화가 가능할 것이다.
- 트렌지션을 만든다.(박스 우클릭 후 make transition 클릭, 연결할 애니메이션을 클릭한다.)
- - 트렌지션(화살표)를 선택하면 Conditions에 매개변수를 넣을 수 있다. 매개변수의 값에 따라 트렌지션이 발생한다. Has Exit Time : 애니메이션이 끝날 때까지 다음 state로 넘기지 않는다는 옵션. 동작을 즉각 바꿔주어야 할 땐 체크를 해제한다.
- condition 지정.
- - 트렌지션의 조건을 지정해준다.(트렌지션 속성 중 condition으로 지정.) 조건은 파라미터 창에 정의된 변수들을 통해 판단한다.
- 적용.
- 오브젝트에 애니메이터 컴포넌트 추가. 여기에 애니메이션컨트롤러를 집어넣는다.
애니메이터로 애니메이션 적용
window>animation>animator 에서 상황에 따라 어떤 애니메이션이 나오게 할지 정할 수 있다.
기초개념
개념 | 설명 |
---|---|
state | 박스 하나하나는 state라고 부른다. |
Entre | Entre는 맨 처음의 상태.
가장 처음엔 Entry가 보이는데, 이는 가장 처음에 적용할 애니메이션을 적용하라는 의미이다.(일반적으로 Idle 상태와 연결한다.) 마우스우클릭>Set as Layer Default State로 연결할 수 있다. |
Exit | 특정 상태에서 Exit로 연결되면 애니메이션이 완전히 종료된다. |
Transition | 한 상태에서 다음 상태로 넘어가는 조건이다.
Make Transition을 통해 다음 상태로의 연결을 할 수 있다. 전이가 일어날 때 자연스럽게 애니메이션이 이어지게끔 하는 시간. 초로 지정하여 두 애니메이션 클립이 부드럽게 섞인다.(Transition Duration) 전환이 일어날 때 얼마 후에 전환할지도 이곳에서 지정할 수 있다. 애니메이션이 종료된 후에야 전이되게 할 수도 있다.(Has Exit Time. 아래 세팅에서 0~1 사이의 값으로 지정한다. 최소 몇% 진행되었을 때 넘어가게 할지.) |
AnyState | 어떤 상황에서든 특정 조건이 발생했을 때 바로 애니메이션이 작동하게 하려면..
피격, 죽음 등에 쓰인다. 이것과 state, exit를 사용하면 된다. |
애니메이션 창
Ctrl + 6 으로 애니메이션 창을 볼 수 있다. 프레임 단위로 애니메이션을 조절할 수 있다. 혹은 애니메이터의 각 state를 선택해 스피드를 조절할 수 있다.
Loop Time 이걸 풀어주면 1회만 실행된다.
각종 동작 구현
이동 구현
Idle 상태의 애니메이션과 walk 상태의 애니메이션, run 상태의 애니메이션이 있다 가정한다.
걷기 구현
- Animator 창의 Parameter 선택.
- +를 누르고 Float 선택 후 해당 파라미터의 이름을 Speed라 짓는다.(이 값은 이동 스크립트 내에서 animator.SetFloat("Speed", playerInput.sqrMagnitude); 등의 방법으로 입력해준다.)
- Idle로부터 Walk의 트렌지션을 만든다.(Walk에서 Idle로 반대로도 트렌지션을 만든다.)
- 각 트렌지션의 'Has Exit Time' 해제.
- Idle>Walk 방향 트렌지션의 condition을 추가한다. Speed와 Greater을 선택하고 0.01 값을 준다.(아주 미세하게 움직여서 속도값을 갖게 되는 경우가 있기 때문.)
- Walk>Idle 방향 트렌지션의 condition을 추가한다. Speed와 Less를 선택하고 0.01 값을 준다.(아주 미세하게 움직여서 속도값을 갖게 되는 경우가 있기 때문.)
점프 구현
아래에선 Walk와 Run 모두 트렌지션을 만들었지만, Walk가 없이 만들어진 게임이 많다.
- Animator 창의 Parameter 선택.
- +를 누르고 Trigger 선택 후 해당 파라미터의 이름을 Jump라 짓는다.(이 값은 이동 스크립트 내에서 animator.SetTrigger("Jump"); 등의 방법으로 입력해준다.)
- +를 누르고 Bool 선택 후 해당 파라미터의 이름을 Grounded라 짓는다.(점프가 끝난 후 바닥판정을 하기 위함.)
- Idle로부터 Jump의 트렌지션을 만든다.(Jump에서 Idle로 반대로도 트렌지션을 만든다.)
- 각 트렌지션의 'Has Exit Time' 해제.
- Idle>Jump 방향 트렌지션의 condition을 추가한다. Jump를 선택한다.
- Jump>Idle 방향 트렌지션의 condition을 추가한다. Grounded를 선택하고, Speed값이 0.01 이하일 조건을 추가한다.
- Jump와 Run 애니메이션의 트렌지션들도 위와 같은 방법으로 추가한다.