마우스 상 하 좌 우를 조절할 때 처음엔 이렇게 썼음. 하지만 딱봐도 귀찮고 길다.
문제점 두가지.
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로는 할 수가 없음.
긴 코드가 깔끔해짐.
'Unity' 카테고리의 다른 글
GetComponent<> (0) | 2021.06.26 |
---|---|
velocity(속도) / 소코반 - 플레이어에 관성 없애기 (0) | 2021.06.26 |
게임 엔진의 원리 : 메시지와 브로드캐스팅 (0) | 2021.06.10 |
게임 엔진의 원리: 게임 오브젝트와 컴포넌트 (0) | 2021.06.09 |
Unity 폴더 필수 요소 (0) | 2021.06.08 |
댓글