3D 오브젝트를 하나 만들고 Plane을 Scale(5,5,5) Player를 다음과 같이 Cube, Shphere를 이용해 만들어준다. Green, Black Material을 만들어 Plane과 Eye에 적용한다.

프로젝트뷰에 우클릭 [Create]후 Animator를 하나 만들고 PlayerAnimCtrl로 이름을 바꾸고, 다시 [Create]후 Animation을 만들고 Idel로 이름을 바꾼다.

하이라키뷰에서 Player의 Head를 선택하면 Animation뷰에서 Create하라고 하면 새로 만들고

AddProperty를 클릭하고 Position옆 + 를 클릭한다.

0:00 ◆ 클릭후 Ctrl-C한후 타임라인 0:30밑을 선택해 Ctrl-V해서 카피한다.

씬뷰탭을 누르고 하이라키뷰의 Head를 선택후 살짝 위로 올린다.

Preview 옆 빨간 ◉ 클릭해 녹화를 한후 다시 클릭해 녹화를 마친다. ▶를 눌러 머리가 위아래로 움직이는지 확인해본다   

Idel옆 ▼를 클릭해 Create New Clip을 선택한후 RunFoward를 만든다

하이라키뷰에서 Player의 Head를 선택하면 Animation뷰에서 Create하라고 하면 새로 만들고 AddProperty를 클릭하고 Position옆 + 를 클릭한다

 

Preview 옆 빨간 ◉ 클릭해 녹화를 시작하고 하이라키뷰의 PlayerHead를 선택하고 TimeLine 0:00을 클릭후 Z Position을 0.5로 변경한후 Preview 옆 빨간 ◉ 클릭해 녹화를 마친다. 혹시 0:00외 다른 타임라인이 있다면 제거해준다. Head가 이동 방향쪽으로만 향해 있으면 되므로 한프레임만 있으면 된다

같은 요령으로 RunLeft, RunRight, RunBackward를 만들오 첫프레임의 Head위치를 변경후 저장해준다. 

 

Animator탭을 선택한후 idle Animation을 끌어다 놓으면 자동으로 Entry와 연결되면서 Default State가 된다.

NewblendTree를 만든다. 이름을 Move로 바꾼다.

Move를 클릭해 들어간후 BlendTree를 클릭한후 인스펙터뷰의 BlendType 속성을 1D를 2D Simple로 변경한다.

Animator탭밑 Parameters를 선택하고 +를 눌러 float incX, float incZ, Bool isMove를 생성한다. Inspector뷰의 Parameters를 incX, incZ를 선택한다.

Motion List +를 4번 눌러 리스트를 4개 만들어 Animation을 끌어다 놓고 PosX와 PosY를 다음과 같이 설정한다.

Animator탭밑 BaseLayer탭을 선택해 다시 돌아가자

Idel과 Move사이 Transition을 만들어준다.

Idle->Move 속성은 다음과 같다. Conditions는 isMove==true, Has Exit time은 언체크 Duration은 0.1

Move->Idle 속성은 다음과 같다. Conditions는 isMove==false, Has Exit time은 언체크 Duration은 0.1

하이라키뷰에서 Player를 선택후 지금만든 PlayerAnimCtrl을 끌어다 Animator 컴포넌트의 Controller에 적용해준다.

이제 PlayerCtrl 스크립트를 만들어 Player에 적용시켜주자.

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

public class PlayerCtrl : MonoBehaviour {
    // Start is called before the first frame update
    private Animator anim;  // 애니메이터 컴포넌트를 담을 변수
    private bool isMove;  // Move State 체크용 파라메터
    void Start() {
        anim = GetComponent<Animator>();  //애니메이터 컴포넌트를 받아온다
    }

    // Update is called once per frame
    void Update() {
        float moveSpeed = 3.0f;
        float _x = Input.GetAxisRaw("Horizontal");  //키임력을 받아
        float _z = Input.GetAxisRaw("Vertical");
        Vector3 direction = new Vector3(_x, 0, _z);  //벡터를 만들고
        isMove = false;

        if (direction != Vector3.zero) {
            isMove = true;  //움직임이 있으면 Move State로 간다
            //큐브를 이동시켜주고
            this.transform.Translate(direction.normalized * moveSpeed * Time.deltaTime);
        }
        //애니메이터 파라메터를 설정해준다
        //애니메이터 파라메터를 설정해준다
        anim.SetBool("isMove", isMove);
        anim.SetFloat("incX", direction.x);
        anim.SetFloat("incZ", direction.z);
    }
}

플레이 해보면 허름한 이동 애니메이션이 실행된다.

 

'유니티스크립팅' 카테고리의 다른 글

Beginner Scripting  (0) 2023.02.25

+ Recent posts