
현재 2D게임에서 Input Manager를 통한 이동 구현을 하고 있다.
Input Manager?
유니티에서 플레이어의 입력을 관리하는 시스템.
키보드, 마우스, 조이스틱 등 다양한 입력 장치로부터의 입력을 감지하고, 그 입력에 반응하여 게임 내에서 어떤 행동을 할지 결정하는 데 사용된다.
예를 들어, 플레이어가 'W'키를 누르면 캐릭터가 전진하도록 설정할 수 있다.
유니티에서 [Edit] -> [Project Settings] -> [Input Manager]
Axes(축):
Unity에서는 입력을 축으로 표현합니다. 축은 일반적으로 -1에서 +1 사이의 값을 가지며, 키보드의 경우 눌려 있지 않으면 0, 눌려 있으면 1 또는 -1의 값을 가집니다.
Buttons(버튼): 특정 행동을 활성화하기 위해 누를 수 있는 키나 버튼을 말합니다.
Gravity: 버튼에서 손을 떼었을 때 축 값이 0으로 돌아가는 속도를 결정합니다. 이 값이 높을수록 축 값이 빨리 0으로 돌아갑니다.
Dead: 축의 민감도를 설정하는 값으로, 이 값보다 작은 입력은 무시됩니다. 즉, 아주 약한 입력을 감지하지 않도록 설정할 수 있습니다.
Sensitivity: 버튼을 누르고 있을 때 축 값이 최대(1 또는 -1)에 도달하는 데 걸리는 시간을 설정합니다. 이 값이 높을수록 빨리 최대 값에 도달합니다.
Snap: 이 옵션을 활성화하면, 한 방향의 버튼을 누르다가 바로 반대 방향의 버튼을 누를 때, 축 값이 중간 단계 없이 바로 반대 값으로 바뀝니다.
Type: 입력 유형을 설정합니다. 키보드 버튼, 마우스 버튼, 조이스틱 축 등이 있습니다.
Axis: 조이스틱 입력을 받을 때, 어떤 축을 사용할지 결정합니다.
Joy Num: 여러 개의 조이스틱 중에서 입력을 받을 조이스틱을 결정합니다.
| Property | Description |
|---|---|
| Name | Axis의 이름. 이 이름을 사용해서 스크립트에서 접근 가능. |
| Descriptive Name | Axis의 설명적인 이름. |
| Descriptive Negative Name | Axis의 음의 방향에 대한 설명적인 이름. |
| Negative Button | Axis를 음의 방향(-)으로 미는 버튼 (키보드, 마우스, 조이스틱) |
| Positive Button | Axis를 양의 방향(+)으로 미는 버튼 (키보드, 마우스, 조이스틱) |
| Alt Negative Button | Axis를 음의 방향(-)으로 미는 대체 버튼 |
| Alt Positive Button | Axis를 양의 방향(+)으로 미는 대체 버튼 |
| Gravity | 버튼을 떼었을 때 Axis 값이 0으로 돌아가는 데 걸리는 시간 |
| Dead | Axis 입력이 무시되는 데드존의 크기 |
| Sensitivity | Axis 값이 최대로 도달하는 데 걸리는 시간 |
| Snap | 버튼을 누르지 않을 때 Axis 값을 즉시 0으로 되돌릴 것인지 여부 |
| Type | 입력 유형 (키보드/마우스 버튼, 조이스틱 Axis 등) |
| Axis | 사용할 조이스틱 Axis 번호 |
| Joy Num | 입력을 받을 조이스틱의 번호 |
키보드이기에 현재는 대체 버튼(alt)을 기본 사용.

이동 관련 로직은 매 프레임마다 호출되는 Update() 메서드에 넣었다.
Input.GetAxisRaw("Horizontal")
Input.GetAxisRaw("Vertical")
각각 수평 및 수직 입력을 검출, 키보드의 좌우 및 상하 방향키 또는 컨트롤러를 사용하여 값을 반환한다.
transform.position += new Vector3(x, y) * Time.deltaTime * speed;
플레이어의 위치를 업데이트한다.
Time.deltaTime은 마지막 프레임과 현재 프레임 사이의 시간 차이로, 프레임 속도에 관계없이 일관된 이동을 가능케 한다.
speed 값(5.0f로 설정)을 곱해주어 이동 속도를 늘렸다.
GetAxis()와 GetAxisRaw()의 차이
GetAxis()와GetAxisRaw()는 Unity에서 사용자 입력을 처리하는 두 가지 방법이다.
둘 간의 차이점은 입력 값을 부드럽게 처리하는 방식, 즉 '스무딩(smoothing)'의 유무에 있다.
스무딩 = 특정 값에서 값으로 이동 할 때 대충 점진적으로 증가
(0 -> 1로 이동한다 치면 0.01 0.02 0.03... 이런 느낌으로 쭉)
GetAxis()는 '스무딩' 또는 보간 기능을 적용하여 입력 값을 제공하는데, 점진적인 증가나 감소를 통해 입력 값을 -1과 1 사이에서 부드럽게 변화시킨다.
예를 들어, 조이스틱을 천천히 움직이면 GetAxis()는 0에서 시작하여 조이스틱의 움직임에 따라 점진적으로 값이 증가하거나 감소한다.
'Gravity(중력)'와 'Sensitivity(민감도)' 설정이 GetAxis()의 입력 반응에 영향을 미친다.
사용자가 입력을 멈췄을 때 값이 0으로 돌아가는 속도나, 최대/최소 값에 도달하는 속도를 제어한다.
(ex. Gravity 값을 통해 좀 더 묵직하거나 가벼운 이동을 구현 할 수도 있다.)
GetAxisRaw()는 입력 값을 '스무딩' 없이 직접적으로 제공한다.
이 함수는 오로지 -1, 0, 1의 값을 반환하고, 조이스틱을 움직이거나 버튼을 누르면, 즉시 최대 값 또는 최소 값으로 반응한다. (중간이 없다)
'Gravity'와 'Sensitivity' 설정이 GetAxisRaw()에는 적용되지 않는다.
(입력을 멈추면 값이 바로 0으로 돌아감)
이렇게 설정은 했는데 대각선 이동 때 상하좌우 이동보다 너무 빨라지기 때문에 new Vector3의 뒤에 .normalized를 추가 해 줄 예정 (벡터의 정규화)
다만 이 방식 대신 새 이동 방식인 유니티 패키지 매니저의
Input System의 이동 방식을 사용하려고 한다.