preview Link : https://velog.io/@suhan0304/Unity2D-GameUndead-Survivor-2
gitHub Link : https://github.com/suhan0304/Undead-Survivor
저번 개발 과정에서 어떤 작업을 했는지 리뷰해보자.
강의영상(2) + a - 새로운 인풋시스템 적용하기
기존에 사용하는 GetAxis나 GetAxisRaw 같은 방식은 Unity의 오래된 input 방식이다. Input system 사용해서 움직임을 구현해보자.
우선 Window > Package Manager 에서 input system을 insall한다.
Package를 Unity Registry로 해야 검색 결과로 나온다. 초기값은 In Project로 되어있다.
Input system을 설치 한 후 적용을 위해서 재시작한다.
Player 오브젝트에 Player Input이라는 컴포넌트를 새로 추가해준다. 이 때 Actions Asset이 없기 때문에 Create Actions로 Player라는 액션을 새로 만들어준다.
Actions Asset을 생성하면 다음과 같이 생성된 Player(Input Actions)를 확인할 수 있다. 여기서 액션은 기존의 Input Manager가 버튼과 기능을 매핑 시킨것과 비슷한 역할을 한다고 볼 수 있다. 오른쪽 Action 속성에 대한 간단한 설명은 아래와 같다.
개발중인 게임에서는 입력을 Vector2 형태로 값을 직접 넘겨받고 Vector2에 대해서 normalized를 똑같이 적용시키기 위해 Processors에 Normalize Vector 2를 추가한 후 Save Asset을 진행했다.
using UnityEngine.InputSystem;
UnityEngine.InputSystem 네임 스페이스를 추가해준 후 기존의 Update 함수문을 삭제한다.
void onMove(InputValue value)
{
inputVec = value.Get<Vector2>();
}
InputSystem에서 제공하는 OnMove 함수를 다음과 같이 작성한다. 이 때 InputValue는 아까 설정한 Player(input Action)에서 물리적 입력이 넘어오는 value를 의미한다. 이를 inputVec에 넣어주면 되는데, 이때 value를 InputValue를 Vector2의 형태로 바꿔줘야하는데 .Get을 이용해 value를 Vector2의 형태로 바꿔준 후에 inputVec에 넣어준다.
이 때 Player(input Actions)에서 normalized를 추가했기 때문에 기존의 normalized를 사용할 필요가 없다.
따라서 완성된 코드는 다음과 같다.
void FixedUpdate()
{
Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime;
rigid.MovePosition(rigid.position + nextVec);
}
void OnMove(InputValue value)
{
inputVec = value.Get<Vector2>();
}
InputSystem에서 사용가능한 함수들은 컴포넌트 창을 통해 확인할 수 있다.