유니티:애니메이션

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동

틀:유니티

  1. 유니티:개요
  2. 유니티:기본 조작
    1. 유니티:에셋스토어
  3. 유니티:카메라
  4. 유니티:오브젝트
    1. 유니티:데이터 입력받기
    2. 유니티:오브젝트 이동(오브젝트 조작)
    3. 유니티:힘으로 오브젝트 이동
    4. 유니티:충돌 이벤트
    5. 유니티:오브젝트 작성 tip
    6. 유니티:프리팹
  5. 유니티:코딩기초
    1. 유니티:C sharp 코딩 편의기능
    2. 유니티:MonoBehaviour
    3. 유니티:이벤트 메서드
    4. 유니티:컴포넌트 조작하기
  6. 유니티:UI
  7. 유니티:게임 내 화면
  8. 유니티:플레이어
    1. 유니티:모델
    2. 유니티:캐릭터 이동
    3. 유니티:애니메이션
    4. 유니티:주인공 시점
  9. 유니티:맵
    1. 유니티:투명한 벽 만들기
    2. 유니티:내비게이션
  10. 유니티:씬
  11. 유니티:몬스터
  12. 유니티:아이템
  13. 유니티:음향
    1. 유니티:배경음
    2. 유니티:효과음
  14. 유니티:빌드
  15. 유니티:VR
    1. 유니티:VR:UI
    2. 유니티:VR:VR로 변환
  16. 유니티:팁

개요[편집 | 원본 편집]

캐릭터가 움직일 때, 점프할 때, 가만히 있을 때의 몸동작이 달라져야 한다. 이를 구현하기 위한 지식.

이 애니메이션들도 역시 스크립트로 제어한다.

방법[편집 | 원본 편집]

  1. 애니메이션 추가.
    - 프로젝트 창에서 Create>Animator Controller로 애니메이터 컨트롤러 선택.(Controller는 애니메이션 상태도를 저장하는 에셋이다.)
    - (???)애니메이션들을 하이어라키 창의 대상에 드래그해 넣는다.(애니메이터에서 추가된 애니메이션들을 볼 수 있다.)
  2. 애니메이터 열기.
    - 애니메이션을 다루는 창을 연다.(window > animation > animator)
  3. 파라미터 추가.
    - 어떤 상태를 판단하는 변수를 추가하는 과정이다. 이 변수는 스크립트에서 다룬다.
    - 애니메이터의 파라미터 창에서 +를 눌러 판단요소를 추가한다.(요소의 스크립트에서 사용할 이름과 똑같이 맞춰야 한다.)
    - 애니메이터의 파라미터에서 추가하면 변수타입을 추가할 수 있다. 특정 상태에서 다른 상태로 변화를 주고자 할 때 변수가 특정 값을 가질 때 state가 변하게 할 수 있다.
    - 변수를 bool형식이 아니라, int형식으로 바꾸면 다양한 상태로의 분기를 만들기 쉽다.
    -- 스크립트에서 파라미터 조작하기.
    클래스에서 전역변수를 정의한다. Animator 변수명; //파라미터를 가져온다. 함수 내에서 변수명 = GetComponent<Animator>(); 변수명.SetBool("애니메이터 안의 매개변수명", 지정할 값); //이 형태로 특정 상태가 발생했을 때 애니메이터 매개변수값을 바꿀 수 있다.(SetTrigger는 값이 없으니, 키만 주면 된다.)
    상태바꾸기를 통해 피격이나 공격이나 다양하게 변화가 가능할 것이다.
  4. 트렌지션을 만든다.(박스 우클릭 후 make transition 클릭, 연결할 애니메이션을 클릭한다.)
    - 트렌지션(화살표)를 선택하면 Conditions에 매개변수를 넣을 수 있다. 매개변수의 값에 따라 트렌지션이 발생한다. Has Exit Time : 애니메이션이 끝날 때까지 다음 state로 넘기지 않는다는 옵션. 동작을 즉각 바꿔주어야 할 땐 체크를 해제한다.
  5. condition 지정.
    - 트렌지션의 조건을 지정해준다.(트렌지션 속성 중 condition으로 지정.) 조건은 파라미터 창에 정의된 변수들을 통해 판단한다.
  6. 적용.
  7. 오브젝트에 애니메이터 컴포넌트 추가. 여기에 애니메이션컨트롤러를 집어넣는다.

애니메이터로 애니메이션 적용[편집 | 원본 편집]

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 상태의 애니메이션이 있다 가정한다.

걷기 구현[편집 | 원본 편집]

  1. Animator 창의 Parameter 선택.
  2. +를 누르고 Float 선택 후 해당 파라미터의 이름을 Speed라 짓는다.(이 값은 이동 스크립트 내에서 animator.SetFloat("Speed", playerInput.sqrMagnitude); 등의 방법으로 입력해준다.)
  3. Idle로부터 Walk의 트렌지션을 만든다.(Walk에서 Idle로 반대로도 트렌지션을 만든다.)
  4. 각 트렌지션의 'Has Exit Time' 해제.
  5. Idle>Walk 방향 트렌지션의 condition을 추가한다. Speed와 Greater을 선택하고 0.01 값을 준다.(아주 미세하게 움직여서 속도값을 갖게 되는 경우가 있기 때문.)
  6. Walk>Idle 방향 트렌지션의 condition을 추가한다. Speed와 Less를 선택하고 0.01 값을 준다.(아주 미세하게 움직여서 속도값을 갖게 되는 경우가 있기 때문.)

점프 구현[편집 | 원본 편집]

아래에선 Walk와 Run 모두 트렌지션을 만들었지만, Walk가 없이 만들어진 게임이 많다.

  1. Animator 창의 Parameter 선택.
  2. +를 누르고 Trigger 선택 후 해당 파라미터의 이름을 Jump라 짓는다.(이 값은 이동 스크립트 내에서 animator.SetTrigger("Jump"); 등의 방법으로 입력해준다.)
  3. +를 누르고 Bool 선택 후 해당 파라미터의 이름을 Grounded라 짓는다.(점프가 끝난 후 바닥판정을 하기 위함.)
  4. Idle로부터 Jump의 트렌지션을 만든다.(Jump에서 Idle로 반대로도 트렌지션을 만든다.)
  5. 각 트렌지션의 'Has Exit Time' 해제.
  6. Idle>Jump 방향 트렌지션의 condition을 추가한다. Jump를 선택한다.
  7. Jump>Idle 방향 트렌지션의 condition을 추가한다. Grounded를 선택하고, Speed값이 0.01 이하일 조건을 추가한다.
  8. Jump와 Run 애니메이션의 트렌지션들도 위와 같은 방법으로 추가한다.