Unity) Input System
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” 선택.
-
기본 사용법
PlayerInput 컴포넌트 사용
PlayerInput
은 여러 입력을 자동으로 처리해주는 컴포넌트다.
-
게임 오브젝트에
PlayerInput
컴포넌트를 추가. -
“Create Actions…” 버튼을 눌러
InputActions
파일을 생성. -
해당 파일을 열어 입력을 설정할 수 있다.
-
Action Maps:
Player
등의 그룹으로 구분 -
Actions:
Move
,Jump
,Fire
등 액션 정의 -
Bindings: 키보드, 게임패드 등의 입력을 설정
-
-
스크립트에서 입력 처리
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 System
은 Xbox, 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);
}
댓글남기기