[Unity] 캐릭터 이동 애니메이션

고현규·2023년 11월 28일

Idle 상태와 Walk 애니매이션


import한 패키지에 들어있는 애니메이션을 이용해서 캐릭터에 애니메이션을 넣었다.
기본상태의 Idle 모션에서 이동 할 때 Walk 애니메이션으로 전환하였다.


에서 다른 애니메이션으로 전환하려면 Animator 조건Transition을 만들어야 한다.

위에서 +버튼으로 변수인 Parameter를 만들어두면 아래의 Condisions에 나타나게 된다.


위에는 IsWalkFloat형으로 만들어서 넣었지만, 처음에는 bool형으로 작성했었다.
해당 조건을 바꾸는 코드를 너무 못 작성한 것 같았느데 팀원의 조언을 받아

수정 전 코드

// PlayerInputcontroller.cs
public void OnMove(InputValue value)
{
	Vector2 moveInput = value.Get<Vector2>().normalized;
	CallMoveEvent(moveInput);

    if (moveInput.x == 0 && moveInput.y == 0)
        Anim.SetBool("IsWalk", false);
    else
        Anim.SetBool("IsWalk", true);
}

매개변수 값이 Vector2로 들어오는데, MoveInput으로 normalized해서 사용중이었다.
이 함수가 움직이는 키가 들어오면 작동되는데, 이동이 되면 MoveInput해당 방향으로 값이 1이된다.
움직이지 않으면 0이 되는데 이를 이용해서 이동중인지 아닌지를 판단해서 IsWalK를 조절했다.

하지만 너무 인위적으로 작성된 코드 같았다.
심지어 해당 코드를 OnMove에 작성했었다.
이후 팀원의 조언으로 해당 코드를 수정했다.

수정 후 코드

// Movement.cs
private void FixedUpdate()
{
    ApplyMovement(_moveDirection);
    _Anim.SetFloat("IsWalk", _moveDirection.magnitude);
}

movement.cs에 코드를 옮겼으며, 위와같이 변경했다.

IsWalkfloat으로 바꾸고
Vector2 값인 moveDirectionmagnitude를 이용해서 0과 1값으로 만들었다.

그래서 Transition에서 0.01보다 크면 이동, 0.01보다 작으면 멈춘것으로 판단했다.

profile
게임 개발과 기획

0개의 댓글