Game Dev/Unity

[유니티] Input System - 01, 유니티의 입력 시스템 대체제, 인풋 시스템 (The Input System) 이란?, 무슨 컨셉 일까?, 어떻게 설치 해야 하나?

Septentrions 2024. 3. 15. 00:48

[Editor]

 

나온지 2년은 넘게 지났지만, 아직도 New Input System 으로 불린다.

유니티에서는 기존의 Input Manager가 여러 플랫폼과 기종에 따라 설정을 달리 해야하는 방식에서 벗어나

새롭게 The Input System 패키지를 배포하고 있다.

 

거의 대부분의 개발 서적과 강의들은 Input Manager 를 기준으로 

가르쳐왔고, 많은 게임 개발자들은 익숙해진 Input Manager에서

새로운 New Input System으로 교체하기에는 굳이? 시간을 들여야 하나? 싶을 수도 있다.

 

지금 쓰는 포스팅은

New Input System 에 대해 철저히 분석해서

많은 이들이 도입 할 수 있게끔 도와주는걸 목표로 하고 있다.

나 처럼 익숙하지 않으면 힘들어하는 초보 개발자들한테 도움이 되었으면 좋겠다.


 

The Input System 이란?

 

The Input System 은 자신의 게임을 컨트롤 할 수 있는 입력 장치를 관리 해주는 패키지이다.

 

기존의 Input Manager 의 사용과 목적이 정확히 같다.

그렇다면, 기존 (Old One) 이라고 표현하는 시스템보다 더 좋아야 사람들이 교체를 고민 할 것이다.

 

(1) Old One, 기존 Input Manager에서는..

 

Docs에서는 기존 인풋 매니저 (Input Manager) 는 

각각의 기종과 키보드에 구현한 기능을 "직접" 바인딩 (binding) 해야 하는 작업이 필요하다.

 

나는 점프 (Jump)를 하고 싶어서, Jump Function() 을 구현했다.

나는 자신의 게임이 플레이스테이션 듀얼 쇼크 패드, 엑스박스 원 엘리드 컨트롤러 심지어 핸드폰 컨트롤러 앱을 통해서도 작동되길 바란다.

그러면, 모든 기기들의 키 바인딩에 맞게 Jump Function 을 등록 해줘야 한다.

 

이 포스팅의 목적은 기존 시스템과 비교가 아니라

새로운 시스템에 대한 특징을 집중적으로 설명할 예정이다.

해당 섹션에서는 어느 정도의 비교 설명이 필요할 것 같았다.

 

(2) 당연히, 위의 불편함을 해결해주고요. 동시에 직관적인 UI 제공,  간편하게 Action 설정도 가능합니다.

 

Input System 은 대부분 플랫폼을 지원하고, 플랫폼 별간의 Action 처리도 가능하며 ( 입력, 홀드, 릴리즈 등)

꽤나 자유롭게 카테고리화가 가능하다.

 

Action들을 원하는 키로 바인딩 할 수 있고, Action을 지정할 수 있다.

사용 방법과 스크립트화 등, 자세한 사용 방법 설명은 계속 될 포스팅에서 하겠다.

 


 

The Input System Basic Concept

 

Docs 리뷰에서 제일 중요한 건,

해당 API나 패키지의 개발 의도와 철학을 이해하는 것이다.

Input System에 담긴 철학은 무엇인지 간단하게 알아보자.

(사실 그냥 Input 에 대한 이야기다.. )

 

 

 

사용자 ( User ) : 게임을 플레이하기 위해 샷건을 치거나 버튼을 마구 휘젓거나, 눌렀다 떼었다 하는 동작을 하는 동물이다.

 

입력 기기 ( Input Device ) : HCI (Human Computer Interaction) 이론에서 말하길, 가장 중요한 사용자와 컴퓨터간의 상호 작용 매체이다. 즉, 키보드다.

 

액션 (Action) : 사용자가 입력 기기를 통해 컨트롤 (Control) 을 했을 때, 의도하는 동작을 말한다. 설명은 어렵게 말하지만,

점프나 달리기 버튼, 대화창 스킵 등. 어떤 일을 하기 위한 행위를 말한다.

 

액션 맵 (Action Map) : 액션들을 어떤 특정 그룹으로 묶어주도록 한다. 해당 액션들을 동시에 제어 하는 역할을 맡는다.

플레이어를 제어하거나, 게임에 등장하는 UI 를 제어하기 위한 액션들을 컨트롤 한다.

 

바인딩 (Binding) : "묶다" 라는 사전 정의 그대로,  입력 기기의 버튼 조작 ( Control ) 과 행위 ( Action ) 을 묶어주는 용어이다. X 버튼을 눌러 조이 액션을 한다고 생각하자.

 

스크립트 ( Action Code ) : 실제로 액션에 의해 어떤 동작을 하는지를 정의한다. 점프 버튼을 눌렀다면, 캐릭터를 점프 시켜야 한다. 캐릭터를 점프 시키는 구현 자체는 스크립트 상에서 구현 되어야 한다. 액션들은 Vector, Bool 혹은 Callback 형태로 사용 된다.

 

액션 에셋 ( Action Asset ) : 인풋 시스템을 사용하는 데에 있어서, 해당 컨셉을 이해해야 한다.

사용자가 입력 기기를 지정하고, 액션을 정의하고, 입력 기기와 액션을 바인딩 한 모든 설정들을 일종의  에셋 (Asset)으로 배포한다. 이 에셋들은 project-wide actions 라고 하며 프로젝트 상에서 쉽게 참조 할 수 있다.

 

public class PlayerScript : MonoBehaviour {

	InputActionAssets action;
    InputAction PlayerMoveAction;
    
    void Awake(){
    	action = new InputActionAssets();
        PlayerMoveAction = action.Player.Move(); 
    }
}

액션 에셋에 대해 설명이 애매하다고 싶으면, 코드를 보자.

그냥.. 입력에 대한 Configuration 들이 담긴 클래스를 하나 선언한다. 라고 이해하면 끝이다.

 


 

 설치 방법, 마우스 클릭 정확히 5번에 끝.

 

유니티 상단의 Window -> Package Manager 를 누르고,

해당 창의 Packages:Unity Registry 탭으로 변경

목록에서 Input System 을 찾아 "Install"

 

그러면 유니티 재시작과 함께 패키지 설치가 완료된다.

이제는 어떻게 해당 패키지를 사용 할 것인가?

 

 

 

Project Setting 에서 Player 에서 아래 목록들을 잘 살쳐보면 Configuration 쪽에

Active Input Handling 토글창이 존재한다.

해당 토글에서 Both 로 변경한다.

*new one 으로 하면 새로운 인풋 시스템만 사용하지만, 뭔가 불안정한게 있는지 동시에 사용을 권장하고 있다.