- 유연하고 확장 가능한 입력 관리
- 다양한 입력 장치를 지원하도록 설계(키보드, 마우스, 컨트롤러, 터치, VR 장치 등)
- 데이터 중심(Input Action Asset)을 사용하여 이벤트 기반으로 작동
- 멀티플레이어 및 복잡한 입력 요구사항에 최적화
- 간단한 단일 입력 처리를 위한 설계
- 입력 처리가 Input 클래스를 통해 이루어짐
- 멀티플레이어 및 복잡한 장치 구성을 처리하기 어려움
- 고정된 폴링 방식(프레임당 입력 상태 확인)
| 항목 | New Input System | Old 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 이다.
Old InputSystem의 비해 비교적 최근에 나온 시스템이므로 Unity에서 지원을 받을 뿐만 아니라
Old InputSystem은 더 이상 업데이트 되지 않는 레거시 시스템이기 때문이다.
하지만 프로젝트의 규모가 작거나 단순한 경우에는 Old InputSystem을 사용하는 것도 좋아보인다.



| 항목 | New | Old | Both |
|---|---|---|---|
| 동작 | New Input System 사용 | Old Input System 사용 | 둘 다 사용 |



- ActionMaps : 입력 액션의 그룹 (캐릭터, UI, 몬스터 ...)
- Actions : 입력 동작(행위)을 정의 (특정 입력에 대한 이벤트 Move, Attack, Jump ...)
- Properties : Action과 관련된 입력 바인딩 및 동작을 세부적으로 정의

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

- 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: 아날로그 입력 방식으로 축 값을 반환
( 조이스틱 입력 )


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