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에서 정의한 정확한 이름으로 접근해야 함