게임카레

유니티 게임패드 입력 본문

Unity 관련

유니티 게임패드 입력

치킨용사 2020. 11. 9. 13:22

먼저 해당 글은 XBox 게임패드를 이용하였음을 알린다.

 

유니티에서 게임을 만들다 보면 가끔은 게임패드가 연동되었으면 좋겠다는 생각을 하기도 한다.

 

기본적으로 게임패드를 입력했을때, 이동축을

 

GetAxis("Horizontal") 으로 입력받아 할 경우 게임패드의 왼쪽 조이스틱으로 움직임이 가능하다는것을 알수 있다.

 

하지만 다른 키에 대해서는 어떻게 입력해야 하는가?

 

주제에 의문에 앞서 유니티 에서는 Input manager 가 존재한다.

말그대로 입력받는 대부분의 키를 관리해주는 기능

 

Input Manager 에 접근하기 위해서는

 

Edit -> Project Settings 에서 

 

좌측에 있는 Input Manager 를 들어가야 한다.

 

Axes 를 펼치게 되면 현재 매핑되어 있는 키들을 확인해볼수 있다.

 

유니티를 사용하며 자주 등장하던 Horizontal, Vertical 이 나온다.

 

이 부분에서 알수 있듯, 우리는 이미 유니티를 이용해 게임을 만들면서 이미 사용하고 있던 부분임을 알고있어야 한다.

 

그럼 이번에 키를 살펴보자

 

무언가 이상한 부분이 있다면 Horizontal, Vertical 등을 포함하여 대부분의 키 들이 아래쪽에서 한번 더 선언된것을 볼수 있다.

 

프로젝트 생성시 초기에는 Size 가 18개가 있는것을 볼수 있다.

이는 18개의 맵핑된 키들이 존재한다는 의미이며 개발자가 원하는 경우 키를 더 매핑 해줄수 있다는 의미 이기도 하다

(현재 게임패드의 테스트를 위해 임의로 수를 늘렸다)

 

가끔 강의 영상, 혹은 책을 보다보면 점프 기능을 구현할때

Jump 라는 키를 따로 매핑하지 않았는데도

Input.GetButtonDown("Jump") 라는 코드를 입력하면 스페이스키를 눌렀을때 해당 코드가 작동하는것을 볼수 있다.

 

별도의 셋팅 없이도 스페이스 키를 입력했을때 Jump 라는 메세지가 발생한다.

 

그 이유는

이미 스페이스 키를 입력했을때 Jump 가 매핑되었기 때문에 해당 메세지가 작동했음을 알수 있다.

Position Button 을 보면 space 키가 매핑되어있음을 확인 할수 있다

 

이외에도 마우스 버튼을 이용하여 Fire1, Fire2, Fire3 등의 매핑이 되어있다.

 

그렇다면 게임패드에서의 입력은?

 

위에서 언급했듯이 아래에 있는 키들이 이번 내용의 핵심이라 할수 있는 게임패드에 입력된 키 들이다.

Mouse ScrollWheel 아래서 부터는 게임패드의 크들로 구성되어있다.

 

우선 기존의 매핑되어 있던 키와 비교해보자

버튼을 이용한 키 매핑

 

조이스틱을 이용한 키 매핑

큰 차이는 없다만 Type 부분을 보면 조이스틱 키 매핑에는 Joystick Axis 라고 써있는것을 볼수 있다.

우리가 추가 조작 없이 Horizontal, Vertical 을 입력했을때 해당 키가 작동하는 이유이다.

 

그렇다면 버튼 키는?

 

이미 Fire123, Jump 키로 매핑이 되어있음을 확인 할 수 있다.

Positive Button 에 joystick button 0 이 입력되어 있다.

 

여기서 주의할 점이라면 원하는 키를 Positive Button 에 입력하면 되지만 만약 조금이라도 틀리게 입력할 경우 커서 이동시 해당 버튼의 이름이 날아가 버린다

 

존재하지 않는 버튼인 joystick button 05를 입력해보았다.

탭 키를 눌러 커서를 옮기니 그냥 사라져 버렸다.

joystick button 의 경우 0~9 까지 존재한다.

 

짧게 정리하자면

매핑되는 키의 이름 게임패드 키
joystick button 0 A
joystick button 1 B
joystick button 2 X
joystick button 3 Y
joystick button 4 Right Bumper
joystick button 5 Left Bumper

여기서 Right Bumper 은 RB 라고 게임패드에 양각 되있으며 플스 패드 유저의 경우 R1 이라고 생각하면 편하다.

테스트 해본 결과 6~9의 키들은 입력이 안된다.

 

 

하지만 그 외에 키들은? 예를들어 오른쪽 조이스틱과 왼쪽 십자키, 트리거 같은 경우이다.

 

트리거의 경우 (LT, RT 라고 패드에 양각되어 있다) 버튼이 아닌 Axis 으로 매핑되어 있다.

 

이번에는 positive button 이 아닌 Axis 에 매핑이 되어있다 왼쪽 오른쪽 각각 9th Axis, 10th Axis 으로 매핑되어있다.

 

해당 조이스틱은 평소 0을 반환하며 버튼 입력시 1을 반환한다.

 

참고로 테스트를 위해 Update 에 GetAxisRaw 함수를 그냥 때려박았다.

Axis 키 이기 때문에 GetButton 함수가 아닌 GetAxis 함수를 사용해야 한다.

 

버튼을 눌렀을때는 1, 누르지 않았을때는 0을 반복하여 출력한다.

다시한번 말하지만 Update 문에 쓴것이기 때문에 프레임 만큼 입력이 반복된다.

 

오른쪽에 있는 조이스틱은 4th Axis, 5th Axis 의 축을 갖고 있지만 입력이 없을땐 계속 -1, 오른쪽 입력을 하면 1을 반환한다.

버그가 있는것같아 사용하기를 권장하지 않는다

(혹시나 하는 마음으로 2개의 게임패드를 사용해봤지만 둘다 같은 문제를 일으켰다.)

 

마지막으로 왼쪽에 있는 십자 키 버튼 입력을 보자

 

이녀석도 특이하게 버튼이 아닌 Axis 키로 되어 있다. 좌 우 입력은 6th, 상 하 입력은 7th 으로 되어있다

 

보통 이쪽 키를 DPAD 라고 부르기에 각각 DHorizontal, DVertical 이라 이름붙여주었다.

 

테스트용 코드를 간단하게 입력 후

 

입력이 잘 되는것을 확인해볼수 있다.