[Unity] InputSystem

gest·2026년 3월 12일

unity

목록 보기
7/9
post-thumbnail

이번에는 InputSystem에 대해 알아보자
기존의 Input 시스템이 있는데 왜 번거롭게 InputSystem을 사용하는 것일까?


쓰는 이유

유연한 장치 입력

장치에 따라 코드에 로직을 따로 설정안해도 된다.

런타임 키 리바인딩

사용자가 원하는 키로 변경하려면 직접 코드를 수정을 안해도 된다.


세팅

InputSystem을 설치한다.


설치하게 되면 에디터가 재시작을 하게 된다.

이후 에셋에 InputActions를 추가한다.


설정


요런 창이 뜰 것이다.
한 번 값을 넣어보자.


이동 구현

이후 wasd를 누르면 이동하는 함수를 구현할 것이다.

버튼을 value로 바꾼다음 Vector2를 반환할거다.
그러고 입력을 받을 키를 추가한다.

여기서는 간편하게 wasd를 추가하는 기능이 따로 있다.


path에서 wasd 입력을 넣도록 하자.


함수 적용

PlayerInput

PlayerInput 컴포넌트를 이용하여 입력을 받으면 함수가 실행되는 방법이 있다.

  1. 내가 만든 player_script인 MoveDirect에 함수 하나를 추가한다.
using UnityEngine.InputSystem;
public void OnMove(InputAction.CallbackContext value)
{
    Vector2 inputVector = value.ReadValue<Vector2>();
    SetVelocity(new Vector3(inputVector.x, 0f, inputVector.y));
}
  1. PlayerInput 컴포넌트를 넣는다.
  1. 잘 움직여진다.

GameInput에 직접 추가

이번에는 PlayerInput 컴포넌트 없이 코드만으로 추가해보자

@GameInput 클래스가 생성됐다.
이후 Player에게 GameInput을 생성시켜서 이벤트를 넣으면 된다.

//생성과 함수 추가
private void Awake()  
{  
    gameInput = new GameInput();  
  
    gameInput.Gameplay.Move.started += OnMove;  
    gameInput.Gameplay.Move.performed += OnMove;  
    gameInput.Gameplay.Move.canceled += OnMove;  
}

//활성화 및 비활성화
private void OnEnable()  
{  
    gameInput.Gameplay.Move.Enable();  
}  
  
private void OnDisable()  
{  
    gameInput.Gameplay.Move.Disable();  
}

메인 함수
public void OnMove(InputAction.CallbackContext value)
{
	Vector2 inputVector = value.ReadValue<Vector2>();
	Debug.Log(inputVector);
	SetVelocity(new Vector3(inputVector.x, 0, inputVector.y));
}

0개의 댓글