유니티에서는 두 개의 입력 시스템을 제공합니다.
구형 입력 시스템인 Input Manager와 신형 입력 시스템인 Input System입니다.
사용자의 키 변경에 대응하기 위해 개발된 Input System은 기존의 Input Manager와는 다른 설정방법을 갖고 있습니다.
저 역시도 이를 사용하는 방법을 배우는데 많은 문제를 겪어
Input Manager와 Input System을 비교해가면서 설명드리고자 합니다.
1) Input Manager
Input Manager는
Input.GetAxis()
함수로 입력값을 읽어들입니다.
이때 GetAxis의 인자는 다음의 과정으로 확인할 수 있습니다.
GetAxis의 인자로 사용할 수 있는 것은 위의 Name입니다.
위의 문자열을 통해 GetAxis는 축을 인지합니다.
각각의 축에 매핑되어있던 키를 통해 입력값을 읽어들이며 그 값의 범위는 -1 ~ +1의 범위를 가집니다.
키를 누른 세기에 따라 그 값의 변화 추이가 달라지는데, 만약 변화 추이를 낮추고 싶다면
위의 Sensitiviy 옵션을 낮추면 됩니다.
이런 식으로 잘 작동하는 것을 확인할 수 있습니다.
그러나 로그를 보면 입력을 인식하는 것이 여러 번 발생하는 것을 확인할 수 있는데,
이 경우에는 bool 플래그와 같은 방식으로 설계해주시면 되겠습니다.
2) Input System
Input Manager를 대체하고자 새롭게 등장한 Input System은
InputAction.ReadValue<>()
함수로 입력값을 읽어옵니다.
Input Manager를 사용하기 위해서는 추가적인 조치가 먼저 필요합니다.
유니티 에디터에서 상단의 Window의 Package Manager에서 Unity Registry에서 Input System을 설치해주셔야 합니다.
사실 Input Syetem을 사용하는 방법은 매우 많고 프로그래머 별로 다르겠지만,
이번 포스트에서는 코드를 통한 Input System을 설정하는 방법을 알려드리겠습니다.
코드의 작성전에 반드시 헤더에 UnityEngine.InputSystem을 포함시켜주셔야 합니다.
본격적인 코드 실행 결과를 보기 이전에 InputAction을 설정하는 방법을 보겠습니다.
[SerializeField] 옵션으로 설정된 InputAction에서 +키를 누르면 키를 바인딩할 수 있습니다.
Vector2 즉, X축과 Y축만을 사용할 에정으로 3번째 옵션을 선택하겠습니다.
그 후에 연결할 키를 설정해주시면 됩니다.
Input System의 큰 장점은 설계자가 직접 키를 설정할수 있고 또 게임이 배포된 이후에도
플레이어의 키 변경에 능동적으로 적용할 수 있다는 것입니다.
이제 코드를 알맞게 구현해주시면 됩니다.
실행 결과는 다음과 같습니다.
잘 실행되는 것을 확인했지만 여전히, 키가 중복되어 입력되는 문제가 보입니다.
이 역시도 자신만의 설계 방법으로 해결해 주시면 되겠습니다.
Input System은 Input Manager와는 다르게, 설정 방법이 매우 다양합니다.
익숙하지 않다면 Input Manager를 사용하셔도 되지만,
Input System을 꼭 익혀서 현대적이고 발전된 입력 시스템을 사용하는 것이 좋다고 생각합니다.
'유니티 > 유니티 C#' 카테고리의 다른 글
유니티 입력 처리 심화 - (2) 임베디드 방식 (0) | 2024.12.10 |
---|---|
유니티 입력 처리 심화 - (1) Direct 방식 (1) | 2024.12.09 |
Collision과 Trigger (0) | 2024.11.11 |
마우스 입력을 통한 캐릭터 이동 (0) | 2024.11.10 |
오브젝트 풀 (0) | 2024.09.28 |