본문 바로가기
C#

[C#][Unity] 2D 캐릭터 이동시 현재방향 저장

by teamnova 2022. 10. 14.

안녕하세요

오늘은 캐릭터 이동시 마지막 방향대로 캐릭터가 계속 유지하는 예제를 진행하겠습니다.

 

기존예제

 

먼저 기존 캐릭터 이동에 사용한 animation controller 를 선택합니다.

 

애니메이터 - 파라미터에서 float 자료형의 lastHorizontal, lastVertical 과 bool 자료형의 moving 파라미터를 생성합니다.

그리고 기존 캐릭터에 사용한 controller 스크립트를 수정하겠습니다.

(기존 예제에서는 playerController 파일로 되어있습니다.)

//CharacterController2D.cs

[RequireComponent(typeof(Rigidbody2D))]
public class CharacterController2D : MonoBehaviour
{
    Rigidbody2D rigid;
    [SerializeField] float speed = 2f;
    Vector2 motionVector;
    Animator animator;
    void Awake()
    {
        rigid = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
    }
	
    //-- 변경된 부분
    public Vector2 lastMotionVector;
    public bool moving; 
    private void Update(){
        float horizontal = Input.GetAxisRaw("Horizontal");
        float vertical = Input.GetAxisRaw("Vertical");

        motionVector = new Vector2(
            horizontal,
            vertical
        );
        animator.SetFloat("horizontal", horizontal);
        animator.SetFloat("vertical", vertical);

        moving = horizontal != 0 || vertical != 0;
        animator.SetBool("moving", moving);
        if(horizontal != 0 || vertical != 0){
            lastMotionVector = new Vector2(
                horizontal,
                vertical
            ).normalized;

            animator.SetFloat("lastHorizontal", horizontal);
            animator.SetFloat("lastVertical",vertical);
        }
    } //-- 변경 끝

    void FixedUpdate()
    {
        Move();
    }

    private void Move(){
        rigid.velocity = motionVector * speed;
    }
}

 

 

update 에서 horizontal 이나 vertical 값이 0이 아니라면 이동을 했다는 증거이므로 마지막 이동 방향을 저장하기 위해 last 값에 저장합니다.

 

 

애니메이터에서 새 블렌드 트리를 생성합니다.

 

 

새로 생성한 블렌드 트리 이름을 변경하고 기본 상태로 설정합니다.

 

 

그리고 새로 만든 블렌트 트리의 인스펙터에서 파라미터를 2D Simple Directional 로 변경을 하고 파라미터를 lastHorizontal, lastVertical 값으로 설정합니다.

 

그리고 모션 추가를 해서 캐릭터 이동에서 했던 것과 동일하게 각 방향별로 애니메이션을 지정해줍니다.

 

이제 다시 애니메이터로 돌아와서 새로 생성한 블렌드트리와 기존 movement라는 블렌드 트리간 전환설정을 해줍니다. (양방향으로)

전환을 생성하면서 생긴 화살표를 누르면 다음과 같은 창이 뜹니다.

셋팅에서 타임을 기존 블렌드 트리 종료 시간으로 옮깁니다.

 

그리고 새 블렌드 트리의 시점을 이동합니다.

 

 

이제 BlendTree Parameters - Conditions 에서 추가 버튼을 누릅니다.

파라미터를 moving 으로 설정하고 moving의 bool 값이 false 일 때 전환이 일어나게 설정합니다.

 

같은 과정대로 반대일 경우에도 동일하게 진행합니다.

 

이번에는 moving의 bool값이 true일 때 전환이 일어나게 설정합니다.

 

이제 준비가 끝났습니다.

 

 

'C#' 카테고리의 다른 글

[C#][Unity] Awake와 Start의 차이  (0) 2022.10.17
[C#][Unity] 2D 오브젝트 화살표로 강조표시  (0) 2022.10.16
[C#][Unity] 중력 조절  (0) 2022.10.01
[Unity] 오브젝트 충돌  (2) 2022.09.26
[C#][Unity] UI 속성  (0) 2022.09.16