유니티 6 버전부터 큰 변화가 생겼습니다. 바로 InputSystem이 기본 설정으로 자리 잡은 것입니다. 이제는 선택이 아닌 필수가 되어가고 있는 추세입니다. 기존 방식을 고수하던 분들은 조금 당황스러울 수 있습니다. 하지만 너무 걱정하지 마세요. 새로운 시스템은 처음에는 복잡해 보이지만 익숙해지면 개발이 훨씬 편해집니다.
많은 분들이 여전히 PlayerInput 컴포넌트만 사용하곤 합니다. 하지만 이것은 기능의 아주 일부일 뿐입니다. 입력 시스템을 제대로 활용하면 코드의 품질이 달라집니다. 오늘은 이 시스템을 왜 써야 하는지 차근차근 알아보겠습니다.
기존 입력 방식과 무엇이 다른가요
예전에는 특정 키를 코드에 직접 적어서 사용했습니다. 스페이스바를 누르면 점프하도록 만드는 식이죠. 이렇게 만들면 나중에 키 설정을 바꿀 때 문제가 생깁니다. 모든 스크립트를 하나씩 열어서 수정해야 하기 때문입니다. 유지보수 측면에서 매우 불리한 방식입니다.
새로운 시스템은 입력과 기능을 철저하게 분리합니다. 점프라는 행동에 스페이스바를 연결할 수도 있고 게임패드 버튼을 연결할 수도 있습니다. 코드는 점프라는 신호만 기다리면 됩니다. 어떤 키를 눌렀는지는 중요하지 않습니다. 덕분에 나중에 키 설정을 변경하더라도 코드를 고칠 필요가 없습니다.

이벤트 기반의 동작 원리 이해하기
매 프레임마다 키가 눌렸는지 검사하던 방식 기억나시나요. 이제는 그렇게 반복해서 검사하지 않습니다. 대신 특정 신호가 들어오면 그때 코드가 반응하도록 만듭니다. 이를 이벤트 기반 처리라고 부릅니다. 델리게이트와 이벤트 문법을 활용하게 됩니다.
처음에는 C#의 이벤트 문법이 조금 낯설게 느껴질 수 있습니다. 하지만 이 방식은 불필요한 연산을 줄여줍니다. 입력이 있을 때만 로직이 돌아가기 때문입니다. 처음 배울 때 원리를 확실히 이해해 두는 것이 좋습니다. 한 번 익혀두면 훨씬 깔끔한 코드를 작성할 수 있습니다.
다양한 입력 기기를 한 번에 처리하기
게임을 만들다 보면 키보드와 마우스만 고집할 수 없습니다. 요즘은 게임패드나 터치스크린 지원도 중요합니다. 과거에는 기기별로 따로 코드를 작성해야 해서 번거로웠습니다. 이제는 하나의 설정으로 여러 기기를 동시에 대응할 수 있습니다.
이것이 바로 멀티플랫폼 개발의 시작입니다. PC에서 모바일이나 콘솔로 플랫폼을 확장할 때 큰 힘이 됩니다. 입력 장치가 바뀌어도 게임 로직은 그대로 유지할 수 있기 때문입니다. 개발자는 각 기기의 특성에 맞는 입력 매핑만 추가하면 됩니다.
디테일한 조작감을 만드는 세부 옵션
게임을 하다 보면 버튼을 길게 누르는 동작이 필요할 때가 있습니다. 혹은 빠르게 두 번 연타하는 동작이 필요하기도 하죠. 이런 기능을 직접 코드로 구현하려면 시간 계산 등 복잡한 과정이 필요합니다. 하지만 InputSystem 내부에는 이미 이런 기능이 준비되어 있습니다.
상호작용 옵션을 조절하면 이런 복잡한 입력도 쉽게 구현이 가능합니다. 조이스틱의 데드존 설정 같은 미세한 조정도 간편하게 처리할 수 있습니다. 개발자가 직접 수학적인 계산을 하지 않아도 됩니다. 여러분은 그저 옵션 값을 알맞게 조절하기만 하면 됩니다.
게임 상태에 따른 유연한 입력 제어
캐릭터가 걷다가 자동차에 타면 조작 방식이 바뀌어야 합니다. 혹은 인벤토리 창을 열면 캐릭터가 움직이지 않아야 하죠. 예전에는 bool 변수를 여러 개 만들어 상태를 관리했습니다. 코드가 복잡해지고 버그가 생기기 쉬운 방식이었습니다.
이제는 액션 맵이라는 기능을 통해 상태를 관리합니다. 걷는 상태와 운전하는 상태를 나누어 관리할 수 있습니다. 상황에 따라 필요한 입력 세트만 활성화하면 됩니다. UI가 켜졌을 때 게임 입력을 차단하는 것도 훨씬 수월해집니다.
유니티 InputSystem 정복하기 강의는 이러한 내용들을 상세하게 다루고 있습니다. 런타임 키 리바인딩이나 실전 예제가 필요하다면 참고해보세요. 새로운 입력 시스템을 마스터하여 더 완성도 높은 게임을 만들어보시길 바랍니다.
강의 링크
이 글에서 다룬 내용에 대해 더 알고 싶으시다면 아래 링크의 강의를 참고하시면 됩니다.
이 링크를 통해 구매하시면 제가 소정의 수익을 받을 수 있습니다.
(유니티 InputSystem 정복하기| 오늘코딩 – 인프런 강의)