빠른 비교
csharp
private void Update()
{
float x = Input.GetAxisRaw("Horizontal");
float z = Input.GetAxisRaw("Vertical");
moveDirection = new Vector3(x, 0f, z).normalized;
if (Input.GetButtonDown("Jump"))
{
Jump();
}
}갈리는 기준
- Unity 입력은 크게 두 흐름이 있습니다. 기존
Input클래스를 쓰는 Legacy Input Manager와, Action 기반의 새 Input System 패키지입니다. Unity 공식 문서도 대부분의 새 프로젝트에는 Input System을 권장합니다. - Legacy 방식은
Update에서GetAxis,GetButtonDown,GetKeyDown을 직접 polling하는 구조라서 이해하기 쉽고 빠르게 시작하기 좋습니다. 작은 프로토타입이나 예제 코드에서는 여전히 자주 보입니다. - 새 Input System은
Action,ActionMap,PlayerInput, callback, rebind, control scheme 같은 개념을 제공해 규모가 커질수록 더 유리합니다. 특히 게임패드, 키보드/마우스, 모바일, 로컬 멀티플레이처럼 입력 종류가 늘어날수록 차이가 큽니다. - 어떤 시스템을 쓰든 공통 원칙은 같습니다. "입력 읽기"는 보통
Update나 callback에서 받고, 물리 반영은FixedUpdate에서 적용하며, 점프처럼 짧은 입력은 버퍼링해 두었다가 물리 프레임에서 소비하는 방식이 안정적입니다. - 그래서 입력 API 이름을 외우는 것보다 입력 파이프라인을 보는 편이 중요합니다. 읽기 위치와 적용 위치를 분리해야 조작감이 흔들리지 않습니다.
선택 기준
| 상황 | 적합한 선택 |
|---|---|
| 작은 프로토타입·빠른 시작 | Legacy Input |
| 게임패드·모바일·로컬 멀티플레이 | New Input System |
| 부드러운 축 이동값 | Input.GetAxis |
| 즉시 -1/0/1 방향값 | Input.GetAxisRaw |
| 버튼 누른 순간 감지 | Input.GetButtonDown |
| 점프·공격처럼 짧은 입력 안정화 | Update에서 읽고 FixedUpdate에서 소비 |
| 비교 | 더 잘 맞는 쪽 | 이유 |
|---|---|---|
| 빠른 프로토타입 vs 장기 운영 | Legacy Input / New Input System | 셋업 비용과 확장성 차이 |
| polling vs action callback | Legacy / Input System | 입력 읽는 위치와 재바인딩 구조가 달라짐 |
| 한 플랫폼 입력 vs 다중 디바이스 대응 | Legacy / Input System | control scheme, rebind, PlayerInput 지원 차이 |
주의할 점
FixedUpdate에서 직접 읽으면 프레임 사이 짧은 누름을 놓칩니다. 읽기와 물리 적용을 분리하세요.
csharp
// ❌ FixedUpdate에서 직접 읽음 — 단일 프레임 누름 놓칠 수 있음
private void FixedUpdate()
{
if (Input.GetButtonDown("Jump")) Jump(); // 누락 위험
}
// ✅ Update에서 읽어 버퍼링, FixedUpdate에서 소비
private bool _jumpBuffered;
private void Update()
{
if (Input.GetButtonDown("Jump")) _jumpBuffered = true;
}
private void FixedUpdate()
{
if (_jumpBuffered) { Jump(); _jumpBuffered = false; }
}csharp
// ❌ Legacy Input과 Input System을 동시에 섞어 읽음
private void Update()
{
float x = Input.GetAxisRaw("Horizontal");
if (moveAction.WasPressedThisFrame()) Dash();
}
// → 입력 소스와 디버깅 지점이 분산돼 문제 원인 추적이 어려워짐
// ✅ 프로젝트 단위로 입력 진입점을 정리
// Legacy를 쓰면 polling 중심으로 통일
// Input System을 쓰면 Action/PlayerInput 중심으로 통일참고 링크
3 sources