이번장에서는 캐릭터가 움직일때, 각방향을 보면서 걷도록 만들어보겠습니다!

 

Stardew Valley like Game in Unity Episode 1-1 에서 8장씩 각 방향별로 걷는 애니메이션을 만들었었는데,

이걸 이용해서 Blend Tree를 만들어보겠습니다

Animator 열기
Blend Tree 생성

 

애니메이터를 먼저 열어주고, 애니메이터 화면에서 마우스 우클릭한다음 Blend Tree를 만들어줍니다.

블렌드 트리의 이름은 Movement로 지정해줬구요

 

더블클릭해서 속성들을 추가 및 변경해주겠습니다

Blend Tree Parameters

 

먼저 파라미터에 horizontal, vertical을 추가시켜줍니다.

Blend Tree Inspector

 

그리고 Inspector에서 Blend Type : 2D Simple Directional로 변경해주고

Parameters에 위처럼 설정을 해줍니다.

Blend Tree Inspector

 

그리고 나서 전에 만들어뒀던 애니메이션 클립들을 여기에 추가시켜줄건데,

+ 버튼을 눌러 탭을 생성할 수 있고 4개 만들어 Pos X Pos Y에 각 값으로 네 방향을 만들어 각

방향에 맞는 애니메이션 클립을 넣어줬습니다.

설정이 끝나면 Hierarchy 창에 있는 MainCharacter Inspector를 확인해주고

MainCharacter Inspector

 

컨트롤러가 잘 들어가있는지 확인해줍니다.

 

저렇게 컨트롤러도 잘 설정이 됐다면 다시 Animator창으로 돌아와서

만들어둔 Blend Tree를 마우스 우클릭을 통해

Blend Tree

 

애니메이터의 Default State로 만들어줍니다!

 

그리고 나서 만들 이 블렌드 트리의 파라미터에 접근하기 위해

CharacterController2D 를 다시 열어

 

애니메이터 컴포넌트를 스크립트로 받아와주고, SetFloat를 통해 값을 전달하는 코드를 추가해주겠습니다.

더보기

using UnityEngine;

[RequireComponent(typeof(Rigidbody2D))] // Rigidbody2D 컴포넌트가 필수임을 명시
public class CharacterController2D : MonoBehaviour
{
    #region Variables
    Rigidbody2D rigidbody2D; // Rigidbody2D 컴포넌트를 저장할 변수
    [SerializeField] float speed = 2f; // 캐릭터의 이동 속도
    Vector2 motionVector; // 입력된 방향 벡터
    Animator animator; // 애니메이터 컴포넌트를 저장할 변수

    #endregion
    void Awake()
    {
        // Rigidbody2D 컴포넌트를 가져와서 변수에 할당
        rigidbody2D = GetComponent<Rigidbody2D>();
        //애니메이터 컴포넌트를 가져와서 변수에 할당
        animator = GetComponent<Animator>();
    }
    private void Update()
    {
        // 사용자의 입력을 기반으로 motionVector를 설정
        // Horizontal: 좌우, Vertical: 상하 입력 값
        motionVector = new Vector2(
            Input.GetAxisRaw("Horizontal"),
            Input.GetAxisRaw("Vertical")
            );

        //추가된 사항
        animator.SetFloat("horizontal", Input.GetAxisRaw("Horizontal"));
        animator.SetFloat("vertical", Input.GetAxisRaw("Vertical"));

    }
    void FixedUpdate()
    {
        // 물리 기반의 이동을 처리하는 Move 함수 호출
        Move();
    }
    void Move()
    {
        // Rigidbody2D의 속도를 motionVector에 따라 설정
        // motionVector를 normalized해서 어떤 방향이든 동일한 속도로 이동하게 설정
        rigidbody2D.velocity = motionVector.normalized * speed;
    }
}

코드를 수정완료했다면 저장하고 실행시켜보면 각 방향별로 캐릭터가 방향을 회전하는걸 볼수있습니다!

 

+ Recent posts