[Unity] Input System - Press , Hold

MINO·2025년 6월 16일

2025-06-17


서론

3D FPS 개인 프로젝트를 진행하는 도중,
Input System 을 활용해 플레이어의 입력을 감지하여 총을 발사하는 로직을 구현했다.

기존 구현 방식은 Input System 의 Send Messages 방식을 사용해 마우스 좌클릭 (Fire 액션) 을 감지하고, 이를 Action 으로 연결해 Weapon 에서 발사를 처리하는 구조였다.

총기 연사를 구현하기 위해 Update 를 사용하지 않고, Interaction 의 Press (Behavior = Press Only) 만으로는 마우스 버튼이 눌려있는 동안 지속적으로 발사하는 기능을 구현할 수 없어 새로운 입력 처리 로직을 도입하게 되었다.


Input System - Interaction

Action 이 트리거되기 위한 입력 조건을 정의하는 요소이다.

주로 액션 게임의 차지 공격이나 높이 점프하기 등에서는 Hold 가 사용되고,
기본 공격이나 기본 점프 등은 Press 가 사용될 것이다.

버튼이 언제, 어떻게, 얼마 동안 눌렸는지를 기준으로 입력 이벤트를 구분할 수 있게 해줄 것이다.


Press

버튼을 눌렀을 때 즉시 실행되는 방식

속성의미
Press Point버튼의 최소 입력 강도를 설정

Default 값은
Project Settings - Input System Package - Settings 를 통해 수정할 수 있다.

Press Only (기본 값)

버튼을 누를 때만 Action 을 트리거하는 방식

게임 패드 트리거를 1/3 이상 눌렀을 때만 총알이 발사되게 하고 싶다면
Press Point 값을 수정하면 된다.

Release Only

버튼을 뗄 때만 Action 을 트리거 하는 방식

마찬가지로 버튼이 얼만큼 떼졌을 때만 Action 이 트리거되게 하고 싶다면
Press Point 를 수정하자.

Press And Release

버튼을 누를 때와 뗄 때 두 번 트리거 하는 방식

Press OnlyRelease OnlyPress And Release

Hold

버튼을 일정 시간 누르고 있어야 실행되는 방식

속성의미
Press Point버튼의 최소 입력 강도를 설정
Hold TimeAction 이 트리거되기 까지 눌러야하는 최소 시간

마우스 왼쪽 클릭을 계속 누르고 있으면, 총알이 계속 나가게 되는 연사 기능을 구현하기 위해
기존의 Press 방식에서 Hold 방식을 사용하였다.


Tap, SlowTap, MultiTap

짧게 누르고 떼는 동작 (Tap),
일정 시간 이상 누르고 떼는 동작 (SlowTap),
더블 탭 등 연속된 입력을 감지하는 동작 (MultiTap) 방식

Tap 관련 동작은 나중에 필요할 때, 다시 찾아보면 될 것 같다.

Unity Docs - Input System.Interaction

Interactions 의 순서

Action 에 여러 개의 Interaction 이 있는 경우, Input System 은 순서대로 Interaction 을 확인한다고 한다.

또한, 한 번에 하나의 Interaction 만을 확인한다.

Tap 을 먼저 확인한다.
(started 콜백 호출 -> 버튼을 계속 누르고 있으면 Tap 시간 초과 -> canceled 콜백 호출)
이후, Slow Tap 을 확인한다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글