2025-06-17

3D FPS 개인 프로젝트를 진행하는 도중,
Input System 을 활용해 플레이어의 입력을 감지하여 총을 발사하는 로직을 구현했다.
기존 구현 방식은 Input System 의 Send Messages 방식을 사용해 마우스 좌클릭 (Fire 액션) 을 감지하고, 이를 Action 으로 연결해 Weapon 에서 발사를 처리하는 구조였다.
총기 연사를 구현하기 위해 Update 를 사용하지 않고, Interaction 의 Press (Behavior = Press Only) 만으로는 마우스 버튼이 눌려있는 동안 지속적으로 발사하는 기능을 구현할 수 없어 새로운 입력 처리 로직을 도입하게 되었다.
Action 이 트리거되기 위한 입력 조건을 정의하는 요소이다.
주로 액션 게임의 차지 공격이나 높이 점프하기 등에서는 Hold 가 사용되고,
기본 공격이나 기본 점프 등은 Press 가 사용될 것이다.
버튼이 언제, 어떻게, 얼마 동안 눌렸는지를 기준으로 입력 이벤트를 구분할 수 있게 해줄 것이다.
버튼을 눌렀을 때 즉시 실행되는 방식
| 속성 | 의미 |
|---|---|
| Press Point | 버튼의 최소 입력 강도를 설정 |
Default 값은
Project Settings - Input System Package - Settings 를 통해 수정할 수 있다.
버튼을 누를 때만 Action 을 트리거하는 방식
게임 패드 트리거를 1/3 이상 눌렀을 때만 총알이 발사되게 하고 싶다면
Press Point 값을 수정하면 된다.
버튼을 뗄 때만 Action 을 트리거 하는 방식
마찬가지로 버튼이 얼만큼 떼졌을 때만 Action 이 트리거되게 하고 싶다면
Press Point 를 수정하자.
버튼을 누를 때와 뗄 때 두 번 트리거 하는 방식
| Press Only | Release Only | Press And Release |
|---|---|---|
![]() | ![]() | ![]() |
버튼을 일정 시간 누르고 있어야 실행되는 방식
| 속성 | 의미 |
|---|---|
| Press Point | 버튼의 최소 입력 강도를 설정 |
| Hold Time | Action 이 트리거되기 까지 눌러야하는 최소 시간 |
마우스 왼쪽 클릭을 계속 누르고 있으면, 총알이 계속 나가게 되는 연사 기능을 구현하기 위해
기존의 Press 방식에서 Hold 방식을 사용하였다.
짧게 누르고 떼는 동작 (Tap),
일정 시간 이상 누르고 떼는 동작 (SlowTap),
더블 탭 등 연속된 입력을 감지하는 동작 (MultiTap) 방식
Tap 관련 동작은 나중에 필요할 때, 다시 찾아보면 될 것 같다.
Unity Docs - Input System.Interaction
Action 에 여러 개의 Interaction 이 있는 경우, Input System 은 순서대로 Interaction 을 확인한다고 한다.
또한, 한 번에 하나의 Interaction 만을 확인한다.
Tap 을 먼저 확인한다.
(started 콜백 호출 -> 버튼을 계속 누르고 있으면 Tap 시간 초과 -> canceled 콜백 호출)
이후, Slow Tap 을 확인한다.