
게임 하나를 끝까지 만들어 본 경험은 이력서의 어떤 자격증보다 설득력이 있습니다. 수업 후반에는 기획부터 출시 가능한 빌드까지 혼자 또는 팀으로 완성하는 프로…
예전 방식과 무엇이 달라졌을까
예전 입력 방식에서는 코드 곳곳에서 특정 키가 눌렸는지 매 프레임 확인했습니다. 간단한 게임에서는 편하지만, 게임패드를 지원하거나 키 설정을 바꾸게 하려면 코드 여러 곳을 고쳐야 했습니다. 입력 장치와 게임 로직이 단단히 붙어 있었던 셈입니다.
신 입력 시스템은 그 사이에 '행동'이라는 층을 하나 둡니다. 게임 코드는 '이동 값이 얼마인가', '공격이 실행됐는가'만 묻고, 어떤 키나 버튼이 그 행동을 일으키는지는 별도 에셋에서 관리합니다. 리모컨 버튼과 TV 기능 사이에 설정 메뉴가 끼어 있어, 버튼 배치를 바꿔도 TV 자체는 그대로인 것과 비슷합니다.
| 기준 | 예전 입력 방식 | 신 입력 시스템 |
|---|---|---|
| 코드가 묻는 것 | 특정 키가 눌렸는가 | 정의한 행동이 실행됐는가 |
| 여러 기기 지원 | 기기마다 코드 추가 | 행동에 바인딩만 추가 |
| 키 설정 변경 | 직접 구현 부담이 큼 | 바인딩 변경 기능을 활용 |
| 설정 위치 | 주로 코드 안 | 입력 액션 에셋 |
설치와 프로젝트 설정에서 확인할 것
패키지 매니저에서 Input System 패키지를 설치하면, 새 입력 방식을 켜고 에디터를 다시 시작할지 묻는 창이 뜹니다. 이 창에서 동의하면 프로젝트 설정이 바뀌고 에디터가 재시작됩니다. 최근 버전의 유니티 템플릿에는 처음부터 이 패키지가 들어 있는 경우도 있습니다.
설정은 Player 설정의 Active Input Handling 항목에서 확인할 수 있습니다. 예전 방식, 새 방식, 둘 다 쓰기 중에서 고르게 되어 있습니다. 예전 방식으로 쓰인 에셋이나 예제 코드를 함께 쓰는 프로젝트라면 둘 다 쓰기로 두는 경우도 있지만, 새로 시작하는 프로젝트라면 한쪽으로 정리하는 편이 혼란이 적습니다.
설치 직후 기존 코드에서 오류가 나는 경우가 있습니다. 예전 입력 함수를 쓰던 스크립트가 새 방식만 켜진 설정에서 동작하지 않기 때문입니다. 에러 메시지에 입력 관련 내용이 보인다면 이 설정부터 확인하면 됩니다.
액션 맵, 액션, 바인딩 세 가지로 구조 이해하기
입력 액션 에셋을 열면 왼쪽부터 액션 맵, 액션, 바인딩 순서로 칸이 나뉘어 있습니다. 액션 맵은 상황별 입력 묶음입니다. 필드에서 쓰는 '플레이어' 맵과 메뉴에서 쓰는 'UI' 맵을 나눠 두고, 상황에 따라 맵을 바꿔 켜면 메뉴가 열린 동안 캐릭터가 움직이는 문제를 막을 수 있습니다.
액션은 '이동', '점프', '공격' 같은 행동 하나하나입니다. 액션마다 종류를 정하는데, 이동처럼 계속 값이 변하는 입력은 값(Value) 종류에 2차원 벡터 형식으로, 점프처럼 눌렀다 떼는 입력은 버튼(Button) 종류로 두는 것이 일반적입니다.
바인딩은 액션과 실제 키를 잇는 연결선입니다. 이동 액션에 키보드의 W, A, S, D를 묶은 상하좌우 합성 바인딩과 게임패드 왼쪽 스틱 바인딩을 함께 달아 두면, 어떤 기기로 조작해도 코드에는 같은 이동 값이 들어옵니다. 키를 찾기 어렵다면 바인딩 설정의 듣기 기능으로 실제 키를 눌러 지정할 수도 있습니다.
바인딩에는 상호작용과 처리기라는 추가 설정도 붙일 수 있습니다. 상호작용은 '길게 누르기', '두 번 누르기'처럼 입력 판정 방식을 바꾸고, 처리기는 스틱 값의 작은 떨림을 무시하거나 값을 반전하는 식으로 입력 값을 다듬습니다. 처음에는 기본값으로 두고, 필요한 순간에 하나씩 써 보면 충분합니다.
코드와 연결하는 대표적인 두 가지 방법
가장 쉬운 방법은 캐릭터에 PlayerInput 컴포넌트를 붙이는 것입니다. 입력 액션 에셋을 지정하고 동작 방식을 고르면, 액션이 실행될 때 스크립트의 함수가 호출됩니다. 메시지 보내기 방식에서는 액션 이름 앞에 On을 붙인 함수, 예를 들어 OnJump 같은 이름으로 함수를 만들어 두면 자동으로 연결됩니다.
코드로 더 명확하게 관리하고 싶다면 입력 액션 에셋 설정에서 C# 클래스 생성 옵션을 켭니다. 그러면 에셋 구조대로 만들어진 클래스를 코드에서 바로 쓸 수 있습니다. 활성화한 뒤 점프 액션의 performed 이벤트에 함수를 등록하거나, 매 프레임 이동 액션의 값을 ReadValue로 읽어 캐릭터를 움직이는 식입니다.
이벤트에는 started, performed, canceled 세 단계가 있습니다. 버튼을 누르기 시작할 때, 행동이 실행된 것으로 판정될 때, 손을 뗄 때로 이해하면 됩니다. 길게 눌러 차지하는 공격을 만든다면 started에서 차지를 시작하고 canceled에서 발사하는 식으로 활용할 수 있습니다.
처음 쓸 때 자주 막히는 지점
- 코드로 만든 액션을 Enable 하지 않아 입력이 전혀 들어오지 않는 경우
- 에셋을 수정한 뒤 저장하지 않아 바뀐 바인딩이 반영되지 않는 경우
- UI 맵과 플레이어 맵이 동시에 켜져 메뉴 조작 중 캐릭터가 움직이는 경우
- 이벤트에 등록만 하고 해제하지 않아 오브젝트가 사라진 뒤 오류가 나는 경우
특히 마지막 항목은 처음에 놓치기 쉽습니다. 오브젝트가 켜질 때 등록했다면 꺼질 때 해제하는 짝을 맞추는 습관을 들이세요. 입력이 안 들어올 때는 창 메뉴의 입력 디버거를 열어 실제 기기 입력이 감지되는지부터 확인하면 원인을 빠르게 좁힐 수 있습니다.
처음 연습은 키보드와 게임패드로 모두 움직이는 캐릭터 하나, 그리고 일시정지 메뉴가 열리면 UI 맵으로 바뀌는 구조를 만들어 보는 것이 좋습니다. 이 두 가지만 해 봐도 신 입력 시스템을 쓰는 이유가 체감됩니다. 예전 입력 방식으로 만든 연습 프로젝트를 어떻게 옮겨야 할지 고민이라면, SBS아카데미게임학원 유니티3D(Unity) 과정 상담에서 프로젝트 구조를 보여 주고 전환 순서를 물어보셔도 됩니다.
자주 묻는 질문
모바일 터치 입력도 신 입력 시스템으로 처리하나요?
처리할 수 있습니다. 화면 터치 위치와 탭을 액션에 바인딩할 수 있고, 가상 조이스틱처럼 화면 위 컨트롤을 액션에 연결하는 컴포넌트도 패키지에 들어 있습니다.
예전 입력 방식은 이제 쓰면 안 되나요?
프로젝트 설정에 따라 여전히 쓸 수 있습니다. 다만 새로 배우거나 여러 기기를 지원할 계획이라면 신 입력 시스템으로 시작하는 편이 이후 확장에 유리합니다.
가까운 캠퍼스에서 유니티 알아보기
사는 곳과 가까운 캠퍼스를 고르면 수업 내용, 오시는 길, 상담 신청을 한 번에 볼 수 있습니다.