애니메이터(1)

1. Hierarchy 창에서 평면을 생성한 후 그 위에 큐브를 생성합니다.

2. Cube를 마우스 오른쪽 버튼으로 클릭하고 Sphere를 선택하여 Sphere를 만들고 Scale을 0.5 x 0.5 x 0.5로 설정합니다.

3. 게임 오브젝트에 Animator 구성 요소 추가(애니메이션을 효율적으로 관리)

4. 프로젝트 창 – Assets 폴더에 생성하고 Animation 폴더로 이동 – ‘+’ 버튼 클릭 – Animator Controller 선택 – 컨트롤러 생성

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

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

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

8. 먼저 Record 버튼을 클릭합니다.

– Sphere의 z축을 2로 설정합니다.

– Record 버튼을 클릭하여 종료합니다.

9. 애니메이션 창 – 새 클립 만들기 – ‘Cube_Backward’라는 파일 만들기 – 녹음 시작 – Sphere의 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프레임마다 Sphere의 y축을 조정하여 떨림 착지 – 녹화 끝(아래 비디오 참조)을 만듭니다.

16. Window-Animation-Animator(애니메이션 관리 창) 클릭 – Hierarchy 창에서 Cube를 선택하면 아래와 같이 Animator 창이 열립니다.


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

18. ‘Cube_Idle’을 마우스 오른쪽 버튼으로 클릭 – 전환을 클릭하여 ‘Cube_Forward’, ‘Cube_Left’, ‘Cube_Backward’, ‘Cube_Right’를 각각 연결합니다(아래 그림 참조).


19. 조건부일 때 애니메이션 활성화, 즉 상태 전환 조건 생성 Animator 창의 Parameters 탭 클릭 – ‘+’ 클릭 – bool 선택 – Create Up/Down/Left/Right (아래 그림 참조)

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


– 종료 시간 포함: 애니메이션 종료 후 상태 전환이 얼마나 걸립니까?

– 전환 기간: 전환에 걸리는 시간

21. 나머지 Base Layer의 각 화살표를 마우스 왼쪽 버튼으로 클릭하고 위와 같이 설정하되 상태 전환 조건을 다음과 같이 설정하십시오.

1) 정방향 -> 유휴 : Up, false

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. Cube의 Inspector 창에서 moveSpeed를 3으로 설정하고 실행하여 애니메이션이 정상인지 확인합니다.

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