유니티 엔진/유니티 엔진의 구성

유니티 엔진의 구성 - 27) 입력 시스템

monstro 2026. 3. 6. 16:53
728x90
반응형

- 개요

유니티의 2개의 입력 시스템

 

유니티에는 위와 같이 2가지의 입력 방식이 존재한다

  • 구형 Input Manager : 단순한 구현 방식 + 유연한 설정불가능
  • 신형 Input System : 복잡한 구현 방식 + 유연한 설정가능

 

1) Input System의 기본 구성요소

Input System의 구성요소

 

Input System을 구성하는 구성요소는 크게 위의 3가지와 같다

Input Action - Action Maps - Actions 순서로 구성되어 있다

 

Input Action 애셋

 

Input Action 애셋은 Generate C# Class 기능을 사용하여 C# 스크립트를 생성할 수 있다

생성한 C# 스크립트를 사용하면 Player Input 컴포넌트 없이 Input Map이나 Input Action에 접근할 수 있다

 

2) Input Action의 Action Type

Input Action - Action Type

 

Action Type은 위와 같이 3가지로 구성되어 있다

  • Value 속성 : 연속적인 상태 변화감지하는 용도 + 여러 장치 중에서 활성화된 장치만 선택하여 감지
    • 주 용도 : 조이스틱 이동, 마우스 좌표
  • Button 속성 : 누르거나 떼는 입력과 같은 이진 상태 감지 용도
    • 주 용도 : 점프, 공격, 상호작용
  • Pass Through 속성 : Value와 비슷하나 모든 연결된 장치의 입력동시에 수신하는 용도
    • 주 용도 : VR 트래킹, 다중 컨트롤러 동시 입력

 

3) Input System의 스크립트 구현 방식

3 - 1) PlayerInput 컴포넌트 사용

 

인스펙터에서 PlayerInput 컴포넌트Behavior를 사용하여 스크립트로 작성한 로직을 연결할 수 있다

프로그래밍의 양이 적어지고 시각적으로 연결 관계를 표현할 수 있다

 

3 - 2) Input Action 애셋 클래스 참조

Input Action 애셋의 클래스 생성

 

위와 같이 Input Action 애셋의 클래스를 생성한다

 

 

생성한 Input Action 애셋 클래스를 스크립트에서 참조하여 사용한다

해당 방식은 코드의 성능이 우수하고 코드를 정교하게 제어할 수 있다

 

3 - 3) 이벤트 기반 방식

 

Input Action에 대한 performed + started + canceled 이벤트에 콜백 함수를 직접 구독한다

버튼과 같은 단발성 입력에 대한 로직을 처리하기에 적합하다

 

3 - 4) 폴링 기반 방식

 

Input Action에 대한 키의 입력값ReadValue 함수를 통해 읽어와 사용한다

캐릭터의 이동과 같은 매 프레임 체크해야 하는 입력을 처리하기에 적합하다

 

4) Input System의 고급 기능

Input System에서는 여러 다양한 하드웨어와 설계방식, 설계자를 고려한 고급 기능을 제공한다

  • Control Schemes : Input Map에 적용하는 설정 + 입력장치별바인딩을 그룹화하는 용도
  • Processors : Input Action에 적용하는 설정 + 입력값코드에 도달하기 전 가공 처리하는 용도
  • Interactions : Input Action에 적용하는 설정 + 입력트리거되는 방식을 설정하는 용도
  • Input Debugger : 상단 Window - Analysis에서 확인 가능 + 연결된 장치와 입력 신호실시간 모니터링

 

5) 실제 구현

5 - 1) Input Action 애셋 설정

TempInputAction - Player 액션 맵의 구성

 

TempInputAction - UI 액션 맵의 구성

 

위와 같이 하나의 InputAction 애셋2개의 Input Map을 생성하였다

 

5 - 2) PlayerInput 컴포넌트 설정

 

PlayerInput 컴포넌트를 위와 같이 구성하여 에디터를 통해 입력에 따른 콜백 함수를 연결하였다

 

5 - 3) 스크립트 구성

 

멤버변수는 위와 같이 구성하였다

각각 물리연산을 위한 Rigidbody + PlayerInput 컴포넌트 + Input Action 애셋 클래스를 의미한다

 

 

Awake 함수는 위와 같이 구성하였다

  • PlayerInput 컴포넌트의 설정 + onActionTriggered 이벤트를 사용하면 입력만 되면 콜백함수를 호출
  • Input Action 애셋 클래스의 인스턴스 생성 + PlayerInput 컴포넌트 없이 콜백 함수 연결
  • Input Action 애셋 클래스의 Jump 액션에 대한 런타임 시점에서 키 재설정
    • PerformInteractiveRebinding 함수를 통해 수행

 

 

FixedUpdate 함수를 위와 같이 오버라이드한다

폴링 기반 방식을 사용하여 Movement 액션의 입력값을 읽어와 오브젝트의 Transform에 반영한다

 

 

Update 함수를 위와 같이 오버라이드한다

Input System의 키보드 입력을 읽어와 Action Map을 전환한다

 

 

Jump 콜백 함수 Submit 콜백 함수의 로직은 위와 같다

  • Jump 함수 : 현재 키의 입력 상태를 출력 + 키가 눌린 상태에서 시간이 경과했다면 오브젝트를 띄움
  • Submit 함수 : 현재 키의 입력 상태를 출력

 

- 최종 실행 결과

728x90
반응형