내일배움캠프 TIL

내일배움캠프 31일차 TIL "이동 입력 버그 수정"

Jooglorystar 2024. 10. 28. 21:00

 

 

 

 

3D 이동 게임을 만들던 도중 input system의 입력을 다음과 같이 받았다.

 

public class PlayerController : MonoBehaviour
{
    public Vector2 curMovementInput;

    public void OnMoveInput(InputAction.CallbackContext context)
    {
        if (context.phase == InputActionPhase.Started)
        {
            curMovementInput = context.ReadValue<Vector2>();
        }
        else if (context.phase == InputActionPhase.Canceled)
        {
            curMovementInput = Vector2.zero;
        }
    }
}

 

 

그러나 해당 코드로 실행 시 이동이 매끄럽지 않았다.

예를들면 앞으로 이동과 옆으로 이동을 함께 눌렀을 때, 대각선으로 이동하지 않았다.

직각으로 이동한다고 쳐도, 앞 이동 버튼을 누른 상태로 옆 이동 버튼을 바로 누르면 앞으로 이동이 유지되는 현상이 일어났다.

 

public class PlayerController : MonoBehaviour
{
    public Vector2 curMovementInput;
    
    public void OnMoveInput(InputAction.CallbackContext context)
    {
        if (context.phase == InputActionPhase.Performed)
        {
            curMovementInput = context.ReadValue<Vector2>();
        }
        else if (context.phase == InputActionPhase.Canceled)
        {
            curMovementInput = Vector2.zero;
        }
    }
}

 

 

이때 Started를 Performed로 바꾸니 문제가 해결되었다.

Started는 입력 받는 순간만을 받기 때문에 문제가 발생할 수 있지만, Performed는 입력이 완전히 끝난 상태를 받기 때문이다.