GetAxis()메서드와 입력매니저(Input Manager)
이전글)
2019/05/17 - [Unity/TIL] - Unity에서의 키입력으로 오브젝트를 이동시키는 방법
Unity에서의 키입력으로 오브젝트를 이동시키는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 using System.Collections; using System.Collections.Generic; using UnityEngine;..
gcoding.tistory.com
GetAxis()메서드
이전 글에서 Unity에서 오브젝트를 키입력을 받아 이동시키는 코드를 만들어 보았다.
내가 일반적으로 생각하고 있던 Input.GetKey() 메서드를 통한 키입력 방식이 아닌
Input.GetAxis() 메서드라는 것을 이용하였는데 여러 장점이 있다.
1) 입력키 커스터 마이제이션을 구현이 수월하다.
2) 조이스틱 같은 다양한 입력장치에 대응 가능하다.
먼저, 내가 일반적으로 생각하고 있던 방식인 Input.GetKey() 이용하여 움직임을 주는 코드는 다음과 같다.
if (Input.GetKey(KeyCode.UpArrow) == true) {
playerRigidbody.AddForce(0f, 0f, speed);
}
↑키가 눌리면 true값이 반환될 것이고 true가 반환되었다면 Addforce를 통해 힘을 가해 이동하는 방식이다.
위의 코드는 if문으로 검사하는 과정이 번거롭게 각 키마다 들어가야 하는데다가, 조작키를 실시간으로 변경할수 없다.
만약에 이 코드가 ↑키가 아닌 다른 키를 눌렀을때 반응하게 하려면 코드 그 자체를 수정해야 할 것이다.
이 경우 게임내에서 키 설정을 바꾸는 기능을 제공하려 할때 매우 번거로운 문제가 될 것이다.
반면 GetAxis() 메서드는 입력 이름이라는 방식을 이용함으로써 이 문제에 대응이 가능하다.
자, 좀더 다시 간략하게 설명해보자
다음과 같은 코드가 있다
if (마우스 왼쪽 버튼을 누름) {
//총 발사
}
이 방식은 게임 도중 '마우스 오른쪽 버튼' 등으로 바꿀 수 없다.
하지만 다음과 같은 코드로 작성하면 나중에 조작키를 바꿀 수 있다.
if("발사"에 대응 되는 버튼을 누름) {
//총 발사
}
위 방식은 '발사'라는 입력 이름에 대응되는 버튼을 감지한다. 중요한 점은 구체적으로 어떤 버튼을 감지할 것인지 명시하지 않는다.
코드 (실제 발사 가능) ↔ 입력 이름 ("발사") ↔ 입력장치(마우스 왼쪽 버튼)
만약 총 발사에 마우스 오른쪽 버튼을 사용하고 싶다면 "발사"라는 입력이름에 대응하는 버튼을 변경하면 되고 코드는 수정할 필요가 없다.
코드 (실제 발사 가능) ↔ 입력 이름 ("발사") ↔ 입력 장치 (마우스 오른쪽 버튼)
이전 글에서 사용한 코드에서 Horizontal 과 Vertical이 바로 유니티에서 사용하는 축으로 위에서 설명한 입력 이름이다.
Input.GetAxis("Horizontal");
Input.GetAxis("Vertical");
축은 축에 대응 하는 버튼을 가진다. 따라서 축을 사용하면 사용할 입력키를 직접 명시하지 않아도 된다.
그리고 그 축은 유니티의 입력매니저(Input Manager)에서 관리한다.
입력매니저 (Input Manager)
Horizontal이나 Vertical 등 미리 설정된 축들과 그에 대응되는 입력버튼들을 확인해보자
Edit → Project Setting

Input 탭의 Axes를 눌러보면 미리 설정 되어있는 입력 축들이 표시된다.

우리가 GetAxis 메서드에서 사용했던 축이름인 Horizontal과 Vertical 을 눌러서 확인해보자
각 축에 대응하는 입력 버튼들이 미리 설정되어있다.

기존 Horizontal 과 Vertical 축의 설정을 변경하거나 Axes에 새로운 축을 추가하여 자신만의 입력 설정을 만드는 것이 가능하다.
또 위 사진을 보면 알듯이 밑쪽에 Horizontal 과 Vertical이 하나씩 더 있는데 이것은 콘솔 게임기 게임패드의 조이스틱(아날로그 스틱)에 대응된다.
여기서 잠깐 이전글 참고내용)
Input.GetAxis(); 메서드는 축(Axis)의 이름을 받는다. 그리고 다음 경우에 따라 감지된 입력 값을 반환한다.
- 축의 음의 방향에 대응되는 버튼을 누름 : -1.0
- 아무것도 누르지 않음 : 0
- 축의 양의 방향에 대응되는 버튼을 누름 : +1.0
입력값을 true나 false가 아닌 숫자로 반환하는 이유가 바로 콘솔 게임기의 아날로그 스틱은 살짝 미는 경우와 완전히 미는 경우등 미세한 움직임을 입력할수 있기 때문에 예를들어 살짝 밀었을 경우는 1.0 값이 아닌 0.5 값이 나오게되거나 하는 식으로 할수 있다.