[Unity] New Input System 으로 부드러운 움직임 만들기

Will-Big·2023년 1월 10일
0

유니티

목록 보기
2/4

발생한 문제

유니티에는 다양한 방법 으로 사용자 입력을 받을 수 있지만 비교적 최근 등장한 아래와 같은 New Input System 이 있다.

패키지 매니저에서 임의로 설치가 필요하며 적용하기 위한 다른 절차에 대한 설명은 다른 곳에도 잘 나와 있으니 생략한다.


New Input System 은 기존 Input System 과는 달리

Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")

을 사용하지 않고 PlayerInput 이라는 컴포넌트를 사용해서 받는다. PlayerInput 을 사용하다 보면 알겠지만 키보드에서 Analog 방식(-1 <= x <= 1) 값을 받기가 쉽지 않다.

키보드는 조이스틱과는 달리 입력의 정도가 없기 때문(정확한 이유는 모름)이라고 생각한다. 위 GIF 는 키보드로 입력을 받았을 때 나온 값이다. 세부 설정은 아래와 같다.

분명 Control Type = Vector 2, Mode = Analog 로 했지만 위에서 설명했던 이유로 인해 디지털화 된 값을 받을 수 밖에 없었다.


해결 방법

원하는 값을 받기 위해서 우리가 사용해야 할 함수는 Vector2.SmoothDamp 이다.

파라미터는 세 개만 신경쓰면 된다.

current : 현재 속도
target : 목표 속도
smoothTime : 목표 속도까지 걸리는 시간

current 를 계속 갱신하며 target 에 다가갈 수 있도록 코드를 짜면 된다.

코드

public class PlayerController : MonoBehaviour
{
    public Vector2 smoothInputVelocity;
    public Vector2 moveVec;
    public Vector2 curVec;
    public float smoothRatio;
    
    private void FixedUpdate()
    {
        curVec = Vector2.SmoothDamp(curVec, moveVec, ref smoothInputVelocity, smoothRatio, maxSpeed);
        Debug.Log(curVec);
	}
    
    private void OnMove(InputValue value)
    {
        moveVec = value.Get<Vector2>();
    }
}



실행결과

profile
개발자가 되고싶어요

0개의 댓글