이번장에서는 캐릭터가 움직일때, 각방향을 보면서 걷도록 만들어보겠습니다!
Stardew Valley like Game in Unity Episode 1-1 에서 8장씩 각 방향별로 걷는 애니메이션을 만들었었는데,
이걸 이용해서 Blend Tree를 만들어보겠습니다
애니메이터를 먼저 열어주고, 애니메이터 화면에서 마우스 우클릭한다음 Blend Tree를 만들어줍니다.
블렌드 트리의 이름은 Movement로 지정해줬구요
더블클릭해서 속성들을 추가 및 변경해주겠습니다
먼저 파라미터에 horizontal, vertical을 추가시켜줍니다.
그리고 Inspector에서 Blend Type : 2D Simple Directional로 변경해주고
Parameters에 위처럼 설정을 해줍니다.
그리고 나서 전에 만들어뒀던 애니메이션 클립들을 여기에 추가시켜줄건데,
+ 버튼을 눌러 탭을 생성할 수 있고 4개 만들어 Pos X Pos Y에 각 값으로 네 방향을 만들어 각
방향에 맞는 애니메이션 클립을 넣어줬습니다.
설정이 끝나면 Hierarchy 창에 있는 MainCharacter Inspector를 확인해주고
컨트롤러가 잘 들어가있는지 확인해줍니다.
저렇게 컨트롤러도 잘 설정이 됐다면 다시 Animator창으로 돌아와서
만들어둔 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;
}
}
코드를 수정완료했다면 저장하고 실행시켜보면 각 방향별로 캐릭터가 방향을 회전하는걸 볼수있습니다!