07
22

출처: 유니티 블로그

∥ New input system이란?

유니티 2019.1부터 제공하기 시작한 말 그대로 새로운 input 시스템이다.

 

 

 

∥ New Input System VS Old Input Manager 둘의 차이?

유니티에 기존에 탑재되어있던 InputManager에선, 여러 플랫폼으로 게임을 제작하기 위해 아주 많은 설정이 필요했다. 예를 들어 Jump이라는 동작을 수행한다고 치자. 그럼 inputManager에선

  1. 새 Jump를 만들고, 키보드 Space에 할당
  2. 새 Jump를 만들고, joystick의  A 키에 할당
  3. 새 Jump를 만들고, 기타 지원 기기의 X 키에 할당
  4. (위 작업을 반복...)

하는 식으로 지원하는 기기마다 키를 추가해줘야 했다. 사용자가 현재 어떤 기기로 이 게임을 플레이하는지 알아내는 것도 개발자가 직접 해야 하는 건 덤이다.

단순 인풋 매니저 기본값만 해도, 같은 이름의 키가 여러 번 중복 적용되어있는 것을 볼 수 있다.

 

그러나 New Input System은 그렇지 않다. 기존 인풋 매니저보다 나아진 점을 간단히만 정리해봐도 다음과 같다.

  1. 기본적으로 모든 플랫폼 지원, 플랫폼 변경 이벤트 지원
  2. 훨씬 더 개선된 UI
  3. 엔진 상에서 액션에 쉽게 대응

그러나 현재로서는 개발 단계이며, 알려지지 않은 버그가 존재할 수도 있다.

출처: 유니티 블로그

 

 

 

∥ New Input System 적용하기

유니티에서 새 프로젝트를 시작하면 기본값은 Input System으로 되어있다. 그러니 new input system을 적용하기 위해선 몇 가지 설정이 필요하다.

 

우선 Window > Package Manager 로 가서 좌측 위 Packages를 Unity Registry로 설정한 후, Input System을 찾아주자.

만약 Input System이 설치되어 있지 않다면 새로 설치해준다.

 

그다음 Edit > ProjectSettings > Player로 가서 Active Input Handling을 찾아 시스템을 Input System Package로 바꿔준다.

 

이 뒤에 무슨 알림 창이 뜨는데 대충 Old Input Manager를 끌 거냐는 소리다. Yes를 눌러주자.

 

마지막으로 프로젝트 세팅의 Input System Package로 가서 Create settings asset을 눌러준 다음,

 

설정창 하단 Supported Devices를 추가해준다.

 

 

 

∥ Input Manager 설정하기

오른쪽 마우스 > Create > InputActions를 눌러 새 액션을 만들어 준다.

 

생성된 에셋을 눌러 Edit Asset 해주면

 

이렇게 새 창이 뜬다.

 

이 화면에 보이는 용어들을 짚어보자.

Control Scheme : 특정 키 입력을 사용하기 위해 필요한 요구사항의 집합. 예를 들어 키보드+마우스나, 게임패드+마우스처럼 특정 입력 도구 집합을 사용할 때, Action에 바인딩된 키를 다르게 할 수 있다. Scheme가 달라도 ActionMap과 Action 구조는 항상 같다.
Action Maps : UI에서 작동하는 키 입력 방식과 플레이어에게 필요한 키 입력 방식은 다르다. 작동 중인 Action Map을 변경함으로써 그걸 구현할 수 있다.
Action : 실제 액션 이름과 그에 할당된 키 값은 이곳에 작성한다.

 

이제 플레이어를 움직이는 간단한 작업을 해보자.

Action Maps - Player,

Actions - Move를 새로 생성해주고,

Action Properties - Action - Action Type를 Value, Control Type를 Vector2로 한다.

 

일단 키보드 입력을 넣어볼 것이므로, + 버튼을 눌러 두 번째를 클릭한다.

 

그러면 4가지 방향이 뜨는데, Path를 알아서 설정해준다. 사진의 경우 키보드 화살표 키를 사용했다.

 

위 옵션으로 있는 AutoSave를 켜지 않는 이상 자동 저장이 되지 않으므로, ctrl+S 나 Save Asset 버튼을 통해 저장하자.

 

 

 

  플레이어 움직이기

스크립트 작업을 시작하기 전에, 우리가 생성했던 Input Action Asset에 들어가 Generate C# Class를 눌러 Apply 한다.

그렇게 해서 위와 같이 같은 이름의 스크립트가 생성되어야 한다. 우리는 이걸 불러오는 식으로 작업할 것이다.

 

이런 초간단 플레이어를 만들어준 다음, 아래와 같은 움직임 스크립트를 붙여준다.

using UnityEngine;
using UnityEngine.InputSystem;

public class MyPlayerScript : MonoBehaviour
{
    MainInputAction action;
    InputAction moveAction;

    private void Awake()
    {
        action = new MainInputAction();
        moveAction = action.Player.Move;
    }

    private void OnEnable()
    {
        moveAction.Enable();
        moveAction.started += Started;
        moveAction.performed += Performed;
        moveAction.canceled += Canceled;
    }

    private void FixedUpdate()
    {
        Vector2 keyboard_vector = moveAction.ReadValue<Vector2>();
        MOVE(keyboard_vector.x, keyboard_vector.y);
    }

    private void OnDisable()
    {
        moveAction.Disable();
        moveAction.started -= Started;
        moveAction.performed -= Performed;
        moveAction.canceled -= Canceled;
    }

    void Started(InputAction.CallbackContext context)
    {
        Debug.Log("started!");
    }

    void Performed(InputAction.CallbackContext context)
    {
        Debug.Log("performed!");
    }

    void Canceled(InputAction.CallbackContext context)
    {
        Debug.Log("canceled!");
    }

    void MOVE(float _x, float _y)
    {
        this.transform.position = new Vector2(this.transform.position.x + _x, this.transform.position.y + _y);
    }
}

 

실행해보면, 이제 플레이어가 자유롭게 움직이는 모습을 볼 수 있다.

 

이 이상의 활용법은 공식 문서를 참고하자.

 

 


∥ 참고 문서

https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Settings.html

 

Input settings | Input System | 1.0.2

Input settings To configure the Input System individually for each project, go to Edit > Project Settings… > Input System Package from Unity's main menu. The Input System stores input settings in Assets. If your Project doesn't contain an input settings

docs.unity3d.com

https://blog.unity.com/kr/technology/introducing-the-new-input-system

 

새로운 입력 시스템 소개 | Unity Blog

이번 입력 시스템은 처음부터 사용 편의성, 플랫폼 간 일관성 및 유연성을 염두에 두고 만들었습니다. 향후 Unity 2020.1버전과 함께 릴리스될 예정이며 미리 사용해 보시고 의견을 공유해주시기

blog.unity.com

https://medium.com/nerd-for-tech/moving-with-the-new-input-system-unity-a6c9cb100808

 

Moving with the new input system | Unity

A quick guide about how to implement movement using the new input system in Unity

medium.com

COMMENT