C# 유니티 Input System 이동 구현하기

삐얅·2024년 5월 28일
0

C#

목록 보기
3/9

1. 개요

유니티의 Input System을 사용해서 이동을 구현해볼 예정이다.
이전에 정리한 적이 있지만 이번에는 그때와 다르게 Send Massage와 다른 Invoke Unity Events를 사용해서 구현할 예정이다.

2. 차이점

두 방식 모두 사용자의 입력을 처리하는데 사용된다는 것에서 동일하지만 다음과 같은 차이점이 있다.

  • Send Massage : 이름을 기반으로 입력 이벤트를 자동으로 처리하지만 유연성이 떨어지고, 코드와 입력 시스템 간의 결합도가 높다. 이름이 일치하지 않으면 호출되지 않는다.
  • Invoke Unity Events : 유연한 이벤트 시스템을 사용해 다양한 메서드를 호출할 수 있으며 코드와 입력 시스템 간의 결합도를 낮출 수 있다. 다양한 파라미터 전달이 가능해 복잡한 입력 로직을 처리하기 용이하다.

위 차이점을 보면 비슷한 기능을 하고 있지만 다른 방식으로 작동하는 것을 알 수 있다. 객체 지향 프로그래밍에서는 결합도를 낮추고 응집도를 높이는게 중요한데 결합도가 높은 Send Massage보다 결합도가 낮은 Invoke Unity Events를 사용하는게 더 좋아보인다.

3. 구현

Send Massage

    void OnMove(InputValue value)
    {
        Vector2 movement = value.Get<Vector2>();
        // 이동 로직 처리
    }

Invoke Unity Events

    public void OnMove(InputAction.CallbackContext context)
    {
        if(context.phase == InputActionPhase.Performed)
        {
            curMovementInput = context.ReadValue<Vector2>();
        }

        else if (context.phase == InputActionPhase.Canceled)
        {
            curMovementInput = Vector2.zero;
        }
    }

작동 방식도 다른 만큼 Send Massage 방식과 코드의 작성 방식도 차이가 있다. InputAction.CallbackContext context는 유니티에서 입력 이벤트가 발생할 때 이벤트에 대한 정보를 제공하는 역할을 한다. 특정 액션 입력과 관련된 데이터를 캡슐화해 입력 이벤트에서 어떤 입력인지 어떤 상태인지 등을 알려준다.
입력 값을 읽거나, context.phase에서 Performed, Canceled와 같이 입력의 현재 상태를 확인하는 식으로 이동의 입력 여부를 확인해 넘겨주는 방식이다.

또 Send Massage와 다르게 유니티 인스펙터 창에서 또 추가해줄 것이 있다.

버튼에서 이벤트를 추가해주는 것 처럼 인스펙터에서도 추가해줘야 한다. Send Massage와의 차이점으로 비 프로그래머들도 쉽게 확인이 가능하다는 특징 또한 가지고 있다.

4. 정리

아직 플레이어의 이동 부분에만 적용해 Send Massage를 사용했을 때와의 이점을 크게 체감하지 못했다. 아마 추가적으로 이동이 필요한 오브젝트가 추가 되었을 때 편의성의 차이를 체감할 수 있을 것 같다.
앞서 Send Massage에서 코드로 작성할 때는 이동이 필요할 때마다 함수를 추가해주거나 스크립트를 넣는식으로 했는데, 이걸로 추가적인 코드 없이 실행가능 하게끔 생각해봐야겠다.

0개의 댓글

관련 채용 정보