본문 바로가기
Unity

키보드 Customization / GetAxis

by imagineer_jinny 2021. 6. 26.

마우스 상 하 좌 우를 조절할 때 처음엔 이렇게 썼음. 하지만 딱봐도 귀찮고 길다.

 

문제점 두가지.

 

1. 키보드 키를 하나씩 명시하고 싶지 않다. (W,A,S,D..)

2. 수직, 수평 방향을 꼭 네가지 케이스로 나눌 필요가 있을까?

 

 

해결 방안

 

예를 들어, 발사 기능에는 "Fire"라는 키보드 세팅 기능이 있음

즉 실제 게임에서는 <발사 기능 - 마우스 왼쪽 버튼> 처럼 기능을 1:1로 매핑하지 않음

그 사이에 Fire라는 이름을 한 번 거쳐감.

 

왜 이렇게 할까?

 

게임을 할 때 마우스 왼쪽 입력을 바로 들어가는게 아니라(이렇게 안한다 예시)

Fire 라는 이름에 들어가니까 마우스 왼쪽 버튼이 있는거임.

( 발사 기능 - "Fire" - 마우스 왼쪽 버튼 )

이렇게 하면 customization을 할 수 있음.

// 이렇게 안한다.

if(입력(마우스 왼쪽 버튼)
{
 // 총알을 발사
}

// 이렇게 한다.

if(입력("Fire")
{
 // 총알을 발사
}

즉, 발사 기능에 마우스 왼쪽이 아니라 오른쪽 버튼을 할당하면 ( 발사 기능 - "Fire" - 마우스 오른쪽 버튼 )

프로그램이 Fire라는 이름을 찾아 가니까 거기에 마우스 오른쪽 버튼이 있는 것임.

 

만약 키보드 입력을 마우스 오른쪽으로 바꾸고 싶으면

직접 코드로 가서 if문에 마우스 오른쪽이라고 바꿔야 함.

 

이걸

if(입력(마우스 왼쪽 버튼)
{
 // 총알을 발사
}

 

이렇게!

 

if(입력(마우스 오른쪽 버튼)
{
 // 총알을 발사
}

 

-> 굉장한 낭비!

 

즉, 'Fire'라는 이름만 찾아가면 그 Fire에 마우스 오른쪽 버튼이 있도록 하면 

코드상에서는 사용하는 키보드가 달라진다고 해서 코드 자체를 수정할 필요가 없음.

 

그림 설명으로 가면 유니티에는 Horizontal이라는 이름이 있고

이 이름을 찾아가면 키보드 수평방향에 대응되는 키가 지정되어있음.

// <- ->

// A D (동시에 A, D 키도 할당되어있음)

 

Horizontal이라는 이름을 찾아가니까 거기에 키보드 왼쪽, 오른쪽 / a, d 가 할당되어 있는 거구나!

 

 

GetAxis는 Get 키와 다르게 true, false로 반환하지 않고 왜 숫자로 반환하는가?

조이스틱 때문에! 

키보드는 눌렀다 뗐다 지만 조이스틱은 살짝 밀거나 완전히 미는 게 가능.

유니티는 멀티플랫폼 엔진.

유니티는 조이스틱에도 대응을 해야함.

조이스틱을 왼쪽으로 살살 밀면 -0.2, -0.5 이런 소수점 값도 가능.

살짝 미는 것도 구현할 수 있으니까.

 

정리.

 

왜 Horizontal을 써?

 

1. Horizontal 이름을 한번 거치면 거기에 키 세팅이 있음.

즉, 사용하는 키를 바꿀 때 코드를 수정할 필요가 없음

 

2. 키보드랑 조이스틱도 적용할 수 있어서.

true, false로는 할 수가 없음.

 

긴 코드가 깔끔해짐.

댓글