Unity/기능

[Unity] New Input System 사용하기2

turbulence93 2025. 7. 16. 20:30

1. 세팅하기

  • 저번에는 버튼 컴포넌트에 메서드를 연결하는 방식으로 사용했다.
  • 이번에는 C# 이벤트 방식으로 스크립트를 통해 연결해보자.
  • Behavior → Invoke C Shrp Events 선택


2. C# 이벤트 방식이란?

  • 버튼의 .onClick.AddListener()처럼, 스크립트에서 직접 입력 이벤트를 구독하는 방식
  • 코드가 명확하게 분리되어 있어, 입력 로직을 유연하게 관리할 수 있음

3. 사용 방법

1) InputActions 연결

  • Input Action을 등록한 PlayerInput을 가져온다.
 public PlayerInput playerInput;

2) 입력 액션 구독

  • Input Action에 생성한 actions의 이름으로 접근하여 이벤트를 연결한다.

Actions 목록

  • started는 기존 Input System의 GetButtonDown과 같다. 
  • 키 입력을 했을때 한 번 호출해준다.
  • performed는 GetButton과 같다.
  • 키 입력을 유지하고 있는 동안 계속해서 동작한다.
private void OnEnable()
{
    playerInput.actions["Jump"].started += OnJump;
    playerInput.actions["Move"].performed += OnMove;
}

private void OnDisable()
{
    playerInput.actions["Jump"].started -= OnJump;
    playerInput.actions["Move"].performed -= OnMove;
}
  • 이벤트 등록후엔 해제 코드를 통해 메모리 누수를 방지하도록 하자.

4. 콜백 메서드 작성

  • 메서드를 연결하기 위해서는 InputAction의 콜백을 매개변수로 받는 메서드가 필요하다.
  • 콜백을 통해 context의 정보나 상태도 읽을 수 있다.
private void OnJump(InputAction.CallbackContext context)
{
    Debug.Log("점프!");
}

private void OnMove(InputAction.CallbackContext context)
{
    Vector2 input = context.ReadValue<Vector2>();
    Debug.Log($"이동 입력: {input}");
}

5. 주의 사항

  • OnEnable() / OnDisable() 등을 이용하여 반드시 등록과 해제를 쌍으로 처리하여 메모리 누수를 방지 할 것
  • "Move"와 같이 InputActions에서 정의한 정확한 이름으로 접근해야 함

'Unity > 기능' 카테고리의 다른 글

[Unity] New Input System 사용하기3  (0) 2025.07.18
[Unity] 람다의 캡처와 클로저 개념  (2) 2025.07.17
[Unity] New Input System 사용하기  (0) 2025.07.15
[Unity] New Input System  (0) 2025.07.14
[Unity] Animator의 CrossFade  (0) 2025.07.11