애니메이터 (1)

1. 계층 창에서 레벨 생성 후 상단에 큐브 생성

2. Cube를 마우스 오른쪽 버튼으로 클릭 – Sphere를 선택하여 Sphere 생성 – Scale을 0.5 x 0.5 x 0.5로 설정

3. 애니메이션을 효율적으로 관리하기 위해 Animator 구성 요소를 게임 개체에 추가합니다.

4. 프로젝트 창 – “Animation” 폴더를 만들고 “Assets” 폴더에 입력합니다. – “+” 버튼 클릭 – 애니메이터 컨트롤러 선택 – 컨트롤러 만들기

5. 방금 생성한 Cube_Controller를 해당 게임 오브젝트의 Animator 컴포넌트 컨트롤러에 드래그 앤 드롭합니다.

6. 창 – 애니메이션 – 애니메이션을 클릭하여 애니메이션 창을 엽니다.

7. 애니메이션 창에서 만들기 버튼을 클릭하고 “Cube_Forward”라는 파일을 만듭니다.

8. 먼저 Record 버튼을 클릭합니다. – 구의 Z축을 2로 설정합니다. – Record 버튼을 클릭하여 완료합니다.

9. 애니메이션 창 – 새 클립 생성 – “Cube_Backward” 파일 생성 – 기록 시작 – 구의 z축을 -2로 설정 – 기록 중지

10 애니메이션 창 – 새 클립 만들기 – “Cube_Right”라는 파일 만들기 – 녹화 시작 – Sphere의 x축을 2로 설정 – 기록 중지

11. 애니메이션 창 – 새 클립 만들기 – “Cube_Left”라는 파일 만들기 – 녹화 시작 – Sphere의 x축을 -2로 설정 – 기록 중지

12. 애니메이션 창 – 새 클립 만들기 – “Cube_Idle”이라는 파일 만들기 – 녹화 시작 녹음이 즉시 중지됩니다.

13. 애니메이션 창 – 새 클립 만들기 – “Cube_Jump”라는 파일 만들기 – 녹화 시작 – Sphere의 y축을 2로 설정 – 기록 중지

14 애니메이션 창 – 새 클립 만들기 – “Cube_Fall”이라는 파일 만들기 – 녹화 시작 – Sphere의 y축을 1로 설정 – 기록 중지

15 애니메이션 창 – 새 클립 만들기 – “Cube_Landing”이라는 파일 만들기 – 녹화 시작 – 5프레임마다 구의 y축을 조정하여 초조한 착지 – 녹화 종료(아래 비디오 참조)

16. Window – Animation – Animator(Animation Management 창) – Hierarchy 창에서 Cube를 선택하면 아래와 같이 Animator 창이 열립니다.


17. 기본 레이어 창 – “Cube_Idle”을 마우스 오른쪽 버튼으로 클릭 – “레이어 기본 상태로 설정”을 클릭하여 가장 간단한 상태로 만듭니다. – 주황색으로 활성화됨

18. Cube_Idle을 마우스 오른쪽 버튼으로 클릭 – Make Transition을 클릭하여 아래와 같이 Cube_Forward, Cube_Left, Cube_Backward, Cube_Right를 연결합니다.


19. 조건 viz가 있을 때 애니메이션을 활성화하려면 상태 전환 조건 생성 Animator 창의 Parameters 탭 클릭 – ‘+’ 클릭 – bool 선택 – 아래 그림과 같이 Create Top/Bottom/Left/Right

20. Idle -> Forward를 가리키는 화살표 왼쪽 클릭 – + Inspector 창에서 Conditions 클릭 – Up, true로 설정


– 종료 시간 있음: 애니메이션 종료 후 상태 전환까지 걸리는 시간

– 전환 기간: 전환이 지속되는 시간

21. 나머지 기본 레이어의 각 화살표를 마우스 왼쪽 버튼으로 클릭하고 위 이미지와 같이 설정하되 상태 전환 조건을 아래와 같이 설정합니다.

1) 앞으로 -> 유휴: 위, 틀림

2) 유휴 -> 왼쪽: 왼쪽, 참

3) 왼쪽 -> 유휴: 왼쪽, 잘못된

4) 유휴 -> 역방향: 다운, 참

5) 역방향 -> 유휴: 다운, 오작동

6) 유휴 -> 오른쪽: 오른쪽, 참

7) 오른쪽 -> 유휴: 맞음, 틀림

22. C# 스크립트 코드로 애니메이션 생성 및 제어 – 아래와 같이 코드를 작성한 후 큐브에 드래그 앤 드롭

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    private Animator anim;

    (SerializeField) private float moveSpeed;

    void Start()
    {
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        float _dirX = Input.GetAxisRaw("Horizontal");
        float _dirZ = Input.GetAxisRaw("Vertical");

        Vector3 direction = new Vector3(_dirX, 0, _dirZ);

        // 방향키 아무것도 누르지 않았을 때 Idle 상태로 돌아오게 하기 위해 아래와 같이 모두 false로 작성
        anim.SetBool("Right", false);
        anim.SetBool("Left", false);
        anim.SetBool("Up", false);
        anim.SetBool("Down", false);

        if (direction != Vector3.zero)
        {
            this.transform.Translate(direction.normalized * moveSpeed * Time.deltaTime); // normalized를 해야 1초에 moveSpeed만큼 움직일 수 있음

            if (direction.x > 0)
                anim.SetBool("Right", true);  // Parameters 탭에서 Right가 V표시로 바뀜
            else if (direction.x < 0)
                anim.SetBool("Left", true);
            else if (direction.z > 0)
                anim.SetBool("Up", true);
            else if (direction.z < 0)
                anim.SetBool("Down", true);
        }
    }
}

23. 큐브의 인스펙터 창에서 moveSpeed를 3으로 설정하고 실행하여 애니메이션이 잘 나오는지 확인

(원천) https://youtu.be/gRd2BSY7r2g