Input System

유니티에는 플레이어 인풋을 처리하기 위해 기본적으로 두가지 시스템이 있다.

  • Input Manager

  • Input System

현재는 Input System 패키지를 적극 권장되고 있고, 이를 통해 게임패드, 키보드, 마우스, 터치 등 다양한 입력을 쉽게 제어할 수 있다.

Input System 패키지 설치

  • Unity의 Package Manager (Window > Package Manager)에서 Input System 패키지를 검색 후 설치

  • 설치 후 Unity가 기존 Input Manager와 새로운 Input System을 함께 사용할지 묻는다.

    • 새 Input System만 사용할 경우 → “Yes” 선택 후 Unity를 재시작.

    • 기존 시스템도 유지할 경우 → “No” 선택.

image-20250304112953705

기본 사용법

PlayerInput 컴포넌트 사용

PlayerInput은 여러 입력을 자동으로 처리해주는 컴포넌트다.

  • 게임 오브젝트에 PlayerInput 컴포넌트를 추가.

  • “Create Actions…” 버튼을 눌러 InputActions 파일을 생성.

  • 해당 파일을 열어 입력을 설정할 수 있다.

    • Action Maps: Player 등의 그룹으로 구분

    • Actions: Move, Jump, Fire 등 액션 정의

    • Bindings: 키보드, 게임패드 등의 입력을 설정

    image-20250304143541625

  • 스크립트에서 입력 처리

    • PlayerInput을 통해 이벤트 기반으로 입력을 받을 수 있다.
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    private Vector2 moveInput;

    public void OnMove(InputValue value)
    {
        moveInput = value.Get<Vector2>();
    }

    void Update()
    {
        transform.Translate(moveInput * Time.deltaTime);
    }
}
  • OnMove 함수는 Input Actions에서 Move 이벤트가 발생하면 자동으로 호출.

InputAction을 직접 사용

PlayerInput을 사용하지 않고 InputAction을 코드로 직접 설정할 수도 있다.

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    private InputAction moveAction;

    void Awake()
    {
        moveAction = new InputAction("Move", binding: "<Gamepad>/leftStick");
        moveAction.AddBinding("<Keyboard>/wasd");
        moveAction.Enable();
    }

    void Update()
    {
        Vector2 moveInput = moveAction.ReadValue<Vector2>();
        transform.Translate(moveInput * Time.deltaTime);
    }
}
  • moveAction.Enable();을 호출해야 입력을 받을 수 있다.

  • 키보드와 게임패드를 동시에 지원할 수 있도록 바인딩을 추가할 수 있다.

입력 방식 선택

PlayerInput 컴포넌트를 사용할 때, Behavior 옵션을 설정할 수 있다.

  • Send Messages: OnMove(), OnJump() 같은 함수 자동 호출

  • Unity Events: Unity의 Inspector에서 직접 이벤트 연결 가능

  • Invoke C# Events: C# 이벤트로 직접 연결

예제: Unity Events 사용

  • PlayerInput 컴포넌트에서 OnMove() 이벤트를 Inspector에서 연결할 수 있었다.

입력 디버깅 및 변경

  • Input Debugger (Window > Analysis > Input Debugger)에서 현재 연결된 입력 장치를 확인할 수 있다.
  • Input Actions“Auto-Save” 옵션을 켜두면 변경 사항이 자동 저장한다.

게임패드, 모바일 입력 적용

게임패드 지원

기본적으로 Input SystemXbox, PlayStation, Switch Pro 컨트롤러를 지원한다.

moveAction = new InputAction("Move", binding: "<Gamepad>/leftStick");
moveAction.AddBinding("<Keyboard>/wasd");
  • "<Gamepad>/buttonSouth" → A 버튼
  • "<Gamepad>/rightTrigger" → RT 트리거

모바일 터치 입력 추가

터치 입력을 지원하려면 Touchscreen을 사용한다.

if (Touchscreen.current.primaryTouch.press.isPressed)
{
    Vector2 touchPos = Touchscreen.current.primaryTouch.position.ReadValue();
    Debug.Log("터치 위치: " + touchPos);
}

댓글남기기