게임개발 예제모음

이동방향에 따른 스프라이트 애니메이션 전환 (with InputSystem) 본문

유니티 메모장

이동방향에 따른 스프라이트 애니메이션 전환 (with InputSystem)

게임을만들어보자 2025. 6. 3. 15:47

2025.06.03 - [유니티 메모장] - InputSystem (RigidBody) 이동 예제

 

InputSystem (RigidBody) 이동 예제

2025.06.03 - [유니티 메모장] - 인풋시스템을 통한 오브젝트 이동 (ActionMap) 인풋시스템을 통한 오브젝트 이동 (ActionMap)○ 오브젝트에 Player Input 컴포넌트 추가○ Action에서 액션맵편집 (확인) 필요○

capsuleer.tistory.com

○ 위 포스트에 이어서 스프라이트 애니메이션 추가

 

애니메이션 컨트롤러 및 각 방향에따른 스프라이트 애니메이션 작성은 완료된 상태로 상정한다

 

 

Animator 윈도우에서 설정

  * 인풋시스템에서 입력받은 값을 전달하기위한 float파라메터 생성

 

  * 블렌드트리 생성 (빈공간 우클릭 > Create State > From New Blend Tree)

 

  * 생성된 블렌드트리를 기본 상태로 설정

 

  * 생선된 블렌트트리 더블클릭하여 세부 설정

    ① Blend Type : 2D Simple Directional

    ② 방향에따른 애니메이션 지정을 위한 모션 추가

      ※ 어느 방향도 지정하지 않는 상태를 위한 모션까지 총 5개

    ③ X (양수 : 오른쪽, 음수 : 왼쪽), Y(양수 : 위, 음수 : 아래) 각 방향에 따른 애니메이션 어태치

 

○ 스크립트 설정

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    [SerializeField] float moveSpeed = 3f;    

    Vector2 moveVector;
    Rigidbody2D myRigidbody2d;
    Animator myAnimator;    //컴포넌트 캐싱

    void Start()
    {
        myRigidbody2d = GetComponent<Rigidbody2D>();
        myAnimator = GetComponent<Animator>();     //컴포넌트 캐싱
    }

    void FixedUpdate()
    {
    	Vector2 forceVector = moveVector * moveSpeed * Time.fixedDeltaTime;
        myRigidbody2d.linearVelocity = forceVector;
    }

    void LateUpdate()   //프레임이 끝나는 부분에서 애니메이션 설정
    {
        if (moveVector != Vector2.zero)   
        //입력값이 0이 아닐경우에만 애니메이션 전환
        //해당 조건이 없으면 움직임을 멈췄을 경우 기본자세로 북귀함
        {
            myAnimator.SetFloat("DirectionX", moveVector.x);
            myAnimator.SetFloat("DirectionY", moveVector.y);
            //Animator윈도우에서 설정한 파라메터 문자열을 그대로 입력
        }
    }

    void OnFieldMove(InputValue value)
    {
        moveVector = value.Get<Vector2>();
    }
}