New Input System

JJW·2024년 11월 20일

Unity

목록 보기
1/34

설명


  • 기존의 존재하텍스트는 Old Input System 에서 다양한 플랫폼 간의 일관성과 유연성을 위해 만들어졌습니다.
  • 구 버전의 경우 Input.Getkey류 메서드를 통해 코드 기반으로 이벤트를 만들었다면 신 버전은 미리 버튼에 대해 이벤트 함수를 만들고 연결해주는 식으로 사용하면 됩니다.

New Input System vs Old Input System


  • New Input System
    • 유연하고 확장 가능한 입력 관리
    • 다양한 입력 장치를 지원하도록 설계(키보드, 마우스, 컨트롤러, 터치, VR 장치 등)
    • 데이터 중심(Input Action Asset)을 사용하여 이벤트 기반으로 작동
    • 멀티플레이어 및 복잡한 입력 요구사항에 최적화
  • Old Input System
    • 간단한 단일 입력 처리를 위한 설계
    • 입력 처리가 Input 클래스를 통해 이루어짐
    • 멀티플레이어 및 복잡한 장치 구성을 처리하기 어려움
    • 고정된 폴링 방식(프레임당 입력 상태 확인)

항목New Input SystemOld Input System
지원 입력 장치거의 모든 장치(키보드, 마우스, 게임패드, 터치, VR, AR, 특수 장치)기본적인 키보드, 마우스, 게임패드. VR/AR는 별도 구현 필요
입력 처리 방식이벤트 기반(리스너) 또는 폴링 방식 선택 가능폴링 방식 고정
멀티플레이어 지원멀티플레이어 입력 매핑 및 분리 지원이 내장되어 있음멀티플레이어 처리 시 직접 스크립트를 작성해야함
데이터 구조화Input Action Asset으로 관리. 여러 입력 설정을 시각적으로 정의 가능코드 내에서 하드코딩해야 함
초기 설정 난이도높은 편(설정 파일 생성 및 Input System 패키지 설치 필요)낮음(바로 Input 클래스 사용 가능)
장치 연결/분리 처리연결 및 분리 이벤트를 자동으로 처리직접 구현해야 함
성능복잡한 입력 시 더 나은 성능을 제공하며 CPU 활용을 최적화간단한 입력 처리에는 더 빠를 수 있음
API 사용 방식InputAction, InputDevice, PlayerInput 등의 고급 API 사용Input.GetKey, Input.GetAxis 등의 단순 API 사용
플랫폼 지원다양한 플랫폼 지원 및 확장 가능일부 플랫폼에서 제한적

New Input System vs Old Input System 결론

둘 중 하나를 추천한다면 New Input System 이다.
Old InputSystem의 비해 비교적 최근에 나온 시스템이므로 Unity에서 지원을 받을 뿐만 아니라
Old InputSystem은 더 이상 업데이트 되지 않는 레거시 시스템이기 때문이다.
하지만 프로젝트의 규모가 작거나 단순한 경우에는 Old InputSystem을 사용하는 것도 좋아보인다.

  • 간단한 게임 : Old Input System
  • 장기적이고 확장 가능한 게임 : New Input System

New Input System 사용 방법


  • Unity 6의 경우에는 기본적으로 New Input System이 붙어있지만
  • 다른 경우에는 Pacakage Manager를 통해 설치해야 한다.
  • Windows -> Pacakage Manager -> Unity Registry -> Input System 을 입력하여 Install 해야 합니다.

  • Project -> Input Actions이 보인다면 정상적으로 진행이 된 것입니다.

  • Edit -> Project Settings -> Player -> Active Input Handling
  • 해당 옵션이 New로 되어있으면 됩니다.
항목NewOldBoth
동작New Input System 사용Old Input System 사용둘 다 사용

  • Input Actions를 클릭하면 Input Actions 파일이 생성됩니다.
  • 원래 아무것도 안보이지만 저의 경우에는 이미 사용하는 Input Actions 파일이 있어
    Actions 가 추가되어 있습니다.

  • No Control Schemes -> Add Control Scheme
  • 사용할 플랫폼의 이름을 정해주고 DeviceType에 해당 플랫폼에 맞는 타입을 추가해줍니다

  • 이제 ActionMaps, Actions, Properties 를 설정해야 합니다.
    설정하기에 앞서 각 항목에 대해 설명을 하자면 아래와 같습니다.
    • ActionMaps : 입력 액션의 그룹 (캐릭터, UI, 몬스터 ...)
    • Actions : 입력 동작(행위)을 정의 (특정 입력에 대한 이벤트 Move, Attack, Jump ...)
    • Properties : Action과 관련된 입력 바인딩 및 동작을 세부적으로 정의

  • Actions
    • Value : 연속적인 값(Vector2, float)을 반환합니다.
      (Move : wasd 키, 조이스틱 ...)
    • Button : 단순히 버튼의 눌림 상태를 반환합니다.
      (Jump : 컨트롤러의 버튼 ...)
    • Pass -Through : 여러 장치에서 동시에 입력을 허용합니다.
      (Lock : 마우스 또는 컨트롤러의 스틱 ...)

  • Properties
    • Composite Type (입력 조합의 유형을 설정)
      • 입력 조합의 유형을 설정합니다
      • 2D Vector: 두 축(X, Y)에서 입력 값을 조합하여 Vector2를 생성합니다.
        ( WASD 키 , 조이스틱 ...)
      • Button with One Modifier: 한 개의 수정 키와 함께 동작하는 입력
        ( Shift + Key ...)
      • Button with Two Modifiers: 두 개의 수정 키와 함께 동작하는 입력
        ( Ctrl + Alt + Key ...)
    • Mode (Composite 입력 방식을 정의)
      • Digital: 디지털 입력 방식으로 키가 눌렸는지 여부만 확인
        ( WASD 키 )
      • Analog: 아날로그 입력 방식으로 축 값을 반환
        ( 조이스틱 입력 )

  • 각 키에 맞는 값을 Binding 합니다.
  • 자신의 플랫폼에 맞는 키로 설정해주면 됩니다.

  • 설정이 끝나고 난 뒤 자신이 New Input System 을 사용하고 싶은 오브젝트에 Player Input 을 추가해 줍니다.
  • Actions 에 방금 생성한 Input Actions 을 추가해줍니다. Default Scheme에는 자신이 설정한 Scheme를 추가해도 되고 Any로 냅두셔도 됩니다.
  • Default Map에는 ActionMaps에 추가한 것을 설정해주면 됩니다.
  • Behavior는 이벤트를 호출하는 방식을 정하는 곳입니다. 저는 Send Message를 사용하였습니다.
    • Send Message , BroadCast Messages : 유니티의 Send Message 기능을 사용하는 방식
    • Invoke Unity Events, Invoke C Sharp Events : 유니티나 C#의 이벤트 기능을 사용하는 방식
    • Send Message 로 호출하는 경우에는 On + Actions 이름을 사용하여 함수를 호출합니다.
      (On + Attack = OnAttack, On + Jump = OnJump...)

테스트

느낀 점

New Input System 은 처음에 적응하기가 시간이 좀 걸리지만 적응만 된다면
다양한 기능과 굉장히 편리하기 때문에 시간을 들여서라도 공부하는게 좋아보입니다.

profile
Unity 게임 개발자를 준비하는 취업준비생입니다..

0개의 댓글