1. 플랫폼 간 제어를 쉽게 만든다.
- 키보드, Xbox 컨트롤러, PlayStation 게임패드 등을 통해 동일한 작업을 수행하도록 개발하는 것이 더 수월
- 모든 장치를 일관되고 동기화된 상태로 유지
2. 편집기를 통해 Action Maps, Actions 등을 쉽게 편집할 수 있다.
- 또한 현재 사용되는 입력들에 대해 한 눈에 파악할 수 있다.
3. 이벤트로 작동되기 때문에 Update()에서 계속 확인하지 않아도 되어 이산 입력에 최적화된다.
- 단 스틱과 같은 연속 입력에는 폴링과 정기적인 업데이트가 여전히 필요
4. 런타임 중에 현재 활성화된 입력을 빠르게 확인할 수 있는 입력 디버거가 내장되어 있다.
- 추가 샘플을 설치하면 플레이 하는 동안 화면에 게임패드/기본입력을 직접 시각화 가능
단점이라면 입력을 구현하기에 앞서 해주어야 할 것이 많다.
그냥 쓸 수 없고 Input Action Asset을 만들어 일일히 등록해주어야 한다.
그리고 코드에서도 이벤트 활성화/비활성화 처리를 다 해주어야 해서 추가 작업이 필요하다.
그럼에도 불구하고 기존 입력 방식과 비교했을 때 더 나은 점이 있는 것 같다.
기존 입력 방식 (Input)
- 특정 하드웨어(button, axis 등)를 게임의 기능에 직접 매핑하는 형식
- 장치에 의존되고 나중에 재구성이 어려움
- 다른 유형의 입력 컨트롤을 처리하는 경우 Update()에서의 if문에 계속 추가해주어야 함
- 플레이어가 컨트롤을 자신의 스타일에 맞도록 다시 매핑하게 하기 어려움
새로운 입력 시스템 (Input Action)
- 특정 하드웨어(button, axis 등)을 참조하는 대신 작업에 해당하는 이벤트에 의해 트리거됨
점프의 예시.
- 아래 사진처럼 binding 되는 키만 여러 개 등록해주면 됨
- 게임패드나 키보드에서 "점프"에 해당하는 입력이 실행되면 "점프"이벤트를 트리거하고 콜백으로 "점프" 기능이 사용됨
- 아래 사진처럼 플레이어가 자신의 컨트롤에 맞게 지정하도록 하는 기능도 더 수월하게 개발할 수 있음
예제코드
- 각 액션 등록 시 OnEnable()과 OnDisable()에서 활성화/비활성화 해주어야 함
using UnityEngine;
using UnityEngine.InputSystem;
public class HeroController : MonoBehaviour
{
private DefaultPlayerActions _defaultPlayersActions;
private InputAction _moveAction;
private InputAction _lookAction;
private void Awake() {
_defaultPlayersActions = new DefaultPlayerActions();
}
private void OnEnable() {
_moveAction = _defaultPlayersActions.Player.Move;
_moveAction.Enable();
_lookAction = _defaultPlayersActions.Player.Look;
_lookAction.Enable();
_defaultPlayersActions.Player.Jump.performed += OnJump;
_defaultPlayersActions.Player.Jump.Enable();
}
private void OnDisable() {
_moveAction.Disable();
_lookAction.Disable();
_defaultPlayersActions.Player.Jump.Disable();
}
private void OnJump(InputAction.CallbackContext context) {}
}
'게임엔진 > Unity' 카테고리의 다른 글
[Unity] New Input System 키 입력을 스크립트에 전달하여 처리하기 (0) | 2023.07.25 |
---|---|
[Unity] New Input System 세팅하기 (0) | 2023.07.24 |
[Unity] Input Manager (키보드 입력, 마우스 클릭, 조이스틱 등) (0) | 2023.07.24 |
[Unity] 애니메이션 내 추가 버튼이 비활성화인 이유 (0) | 2023.07.21 |
[Unity] 타일맵에 콜라이더(충돌체) 추가하기 (0) | 2023.07.21 |