우리는 기존의 익숙했던 Legacy Input Manager이 아닌, New Input System을 알아야 할까?


예를 들어보자, 우리는 크로스 플랫폼 게임을 개발하는 중으로, 키를 입력 받아서 인벤토리를 여는 기능을 구현하여야 한다, 그렇다면 우리는 각각의 플랫폼의 환경에 따라 각 플랫폼에 맞는 키를 입력 받아서 인벤토리를 열게 하도록 구현해 주어야 한다.

#if (개발환경)
        if(Input.GetKeyDown(KeyCode.(환경에 맞는 키 이름)))
#endif

위의 예시의 문제는 인벤토리를 여는 기능을 구현하는 것 뿐만 아니라, 플랫폼에 따른 키가 인벤토리를 열게하는 코드를 작성해 주어야 한다.

New Input System은 기본적으로 모든 플랫폼을 지원하며, event 방식으로 동작하기에 성능 또한 더 좋다, 또한 각 플랫폼에 대한 키 입력을 한번에 관리할 수 있는 이점이 있다.

New Input System은 하나의 패키지로, 사용하기 위해서는 Window → Package Manager에서 별도의 설치를 해주어야 한다.


New Input System 사용 방법

  1. New Input System Package 설치

  2. Project에서 Create에서 아래쪽에 Input Actions를 생성해준다.

  3. 생성해준 Input Action을 열고, Input Map을 생성해준다.

  4. 생성한 Input Map 안에서 Action을 생성해준다.

    1. action type을 통해서 input의 입력에 따라 어떠한 처리를 해주어야 할지 정한다.
    2. control type은 action을 호출해줄 지정된 값을 가지는 키를 나타낸다.
  5. action에 들어갈 키들을 모두 매핑해준다.

  6. 스크립트에서 이름이 On + (Action이름)으로 된 public 메서드를 선언 후, 그 안에 동작 해야 할 기능을 구현해준다.

    New Input System 브로드캐스트 형식으로, action의 키에 맞는 input이 들어온다면, action이름 앞에 On이 붙은 메서드를 호출해준다.

  7. 위에서 작성해준 스크립트를 부착해 후에, Player Input이라는 컴포넌트를 부착한 후, 기능에 알맞는 action과 action map을 넣어준다.

    Player Input는 스크립트와 같은 오브젝트에 넣지 않아도 된다.

    using UnityEngine;
    public class TestClass : MonoBehaviour
    {
        private TouchControls touchControls;
        
        private void Awake()
        {
            touchControls = new();
    
            touchControls.Touch.TouchPosition.Enable();
        }
        private void Start()
        {
            touchControls.Touch.TouchPosition.started += ctx => Move();
        }
        public void Move()
        {
            Debug.Log("transform position");
        }
    }
    //구현한 콜백으로, 모바일 기기의 터치가 입력되면 Move()의 Log가 찍힌다. 
    //위의 경우, input action인 TouchControls를 활성화 해주어서, player input 컴포넌트에 할당해주지 않아도 된다.
    

interactions

processors