핵심 정리
text
같은 Jump 액션이라도
- Tap: 짧게 눌렀을 때
- Hold: 일정 시간 눌렀을 때
를 다르게 해석할 수 있다구조 이해
- Input System의 강점은 키를 읽는 것이 아니라 "입력 패턴"을 읽는 데 있습니다.
Tap,Hold,SlowTap,MultiTap같은 Interaction을 쓰면 같은 버튼도 다른 의미로 해석할 수 있습니다. - 이 구조 덕분에 짧은 점프와 길게 모으기, 탭과 차지 공격, 클릭과 길게 누르기를 조건문 분기보다 입력 정의 차원에서 더 자연스럽게 표현할 수 있습니다.
Control Scheme은 키보드/마우스, 게임패드, 터치처럼 장치 묶음을 정의하는 개념입니다. 게임이 어떤 장치 조합으로 동작하는지 명시할 수 있어서 UI 프롬프트 전환과 멀티플레이 입력 구분에도 도움이 됩니다.- composite binding은
WASD, D-pad, left stick처럼 여러 입력을 하나의 벡터나 축으로 합치는 구조입니다. 즉 입력 조합을 코드가 아니라 바인딩에서 해결하게 도와줍니다. - rebind 기능은 플레이어 친화성 측면에서 중요하지만, 동시에 저장과 복원까지 고려해야 완성됩니다. Input System은 이 길을 열어 주지만, UX와 저장 구조까지 자동으로 해결해 주는 것은 아닙니다.
체크포인트
| 상황 | 적합한 선택 |
|---|---|
| 짧은 눌림과 길게 눌림을 구분 | Tap / Hold Interaction |
| WASD·D-pad를 하나의 벡터로 합산 | composite binding |
| 키보드·패드·터치 장치 묶음 정의 | control scheme |
| 장치 변경 시 UI 프롬프트 전환 | control scheme 변경 감지 |
| 플레이어가 키 직접 지정 | rebinding + 저장/복원 구조 |
| 비교 | 더 잘 맞는 쪽 | 이유 |
|---|---|---|
| 단순 버튼 vs 입력 패턴 해석 | 기본 Action / Interaction 추가 | 코드 분기보다 입력 정의에서 의미를 분리하기 쉬움 |
| 장치 나열 vs 장치 묶음 관리 | 개별 binding / control scheme | UI 프롬프트와 멀티플레이 입력 분리가 쉬움 |
| 임시 rebinding vs 영속 rebinding | 세션 내 변경 / 저장·복원 포함 | 재시작 후 유지해야 하는지 여부가 다름 |
주의할 점
rebinding은 저장과 복원까지 설계해야 완성됩니다. 저장 없이 rebind만 구현하면 재시작 시 초기화됩니다.
csharp
// ❌ rebinding 후 저장 없음 — 재시작 시 기본값으로 초기화
action.PerformInteractiveRebinding().Start();
// ✅ rebinding 후 JSON으로 저장, 시작 시 복원
string overrides = action.actionMap.asset.SaveBindingOverridesAsJson();
PlayerPrefs.SetString("InputBindings", overrides);
// 시작 시 복원
string saved = PlayerPrefs.GetString("InputBindings");
if (!string.IsNullOrEmpty(saved))
action.actionMap.asset.LoadBindingOverridesFromJson(saved);text
// ❌ Jump 액션 하나에 Tap, Hold를 동시에 붙였지만
// 게임 의미를 따로 분리하지 않음
// → 짧게 누름과 차지 입력이 같은 상태 머신을 공유해 디버깅이 어려워짐
// ✅ 의미가 다르면 액션 분리도 검토
// JumpTap / JumpCharge 또는 상태별 Action Map 분리참고 링크
3 sources