Input

대인공·2022년 10월 14일
0

Unity

목록 보기
5/14
post-thumbnail

외부입력

외부입력이라 함은 컴퓨터 프로그램 내에서 입력을 받는 것이 아닌 사용자로부터의 키보드, 마우스와 같이 컴퓨터 외부로부터의 입력을 받는 것을 말한다.

컴퓨터 프로그램은 사용자로부터 입력된 정보를 받아와 적절한 이벤트를 보여주어야 하는데, 유니티에서는 Input class를 사용하여 외부로부터 입력된 정보를 받아올 수 있다.


Input Class

Input class에는 기본적으로 게임에 많이 사용되는 키보드, 마우스의 입력정보를 받아올수 있는 메소드들이 정의되어 있다.

그리고 입력 정보를 받는 단계가 3단계로 구분되어 있어 에디터가 사용하고 싶은 정보를 선택하여 사용할 수 있다.

  1. 눌렀을 때 / Down : 눌렀을 때만 true반환. 그외 false.
  2. 누르고 있을 때 : 누르는 동안 계속 true반환. 그외 false.
  3. 땠을 때 / Up : 땠을 때만 true반환. 그외 false.

1. 마우스 입력

기본적인 마우스는 버튼이 3개로 좌클릭, 휠클릭, 우클릭순으로 0, 1, 2의 순으로 번호가 매겨진다.

코드의 사용법으로는 다음과 같다.

if(Input.GetMouseButtonDown(int Mouse))
if(Input.GetMouseButton(int Mouse))
if(Input.GetMouseButtonUp(int Mouse))

인자로 전달되는 int Mouse에 입력받고싶은 클릭의 번호를 전달하면 된다.


2. 키보드 입력

키보드에는 수많은 버튼이 있다. 키보드의 입력값이 열거체로 전달된다.

코드의 사용법은 다음과 같다.

if(Input.GetKeyDown(keyCode))
if(Input.GetKey(keyCode))
if(Input.GetKeyUp(keyCode))

인자로 전달되는 keyCode는 string형식으로 "a"와 같이 전달 해도 되지만 KeyCode의 열거체를 사용하여도 된다.

"a"와 KeyCode.A의 입력값은 같다.


Input Manager

유니티 에디터에는 편의성을 위하여 많이 사용하는 조작방법을 만들어 놓았다.
Edit -> Project Settings -> InputManager(또는 Input)에 가면 기본적으로 제공되고 있는 것들이 몇가지가 있고, 사용자가 추가, 수정을 할 수 있다.

  • Axes에 있는 항목
    - Name : Axis의 이름. 스크립트상에서 이 이름으로 접근이 가능하다.
    - (Alt) Negative/Positive Button : 키보드의 키, 마우스/조이스틱의 버튼 등으로 Axis를 -, + 방향으로 미는 버튼
    - Alt Negative/Positive Button : Axis를 -, + 방향으로 미는 대체 버튼
    - Gravity : 버튼 입력이 사라졌을때 Axis의 중립으로 되돌아가는 속도 (Units per second)
    - Dead : Analogue device에서 Null값이 아니기 위한 최소 Input 범위. 이 범위를 넘어야 입력이 됨.
    - Sensitivity : Target Value로 Axis가 움직이는 속도 (Units per second). 디지털 기기만 해당
    - Snap : 활성화 할 경우, 반대 방향 버튼을 누르는 경우 Axis가 0으로 리셋됨
    - Type : Input Device Type. Key or Mouse Button/Mouse Movement/Joystick Axis 중 택일
    - Axis : 연결된 Device의 Axis가 컨트롤 하는 Axis
    - Joy Num : 해당 Axis를 컨트롤 하는 조이스틱
  • (Alt) Negative/Positive Button에 할당가능한 버튼 목록
  1. 문자 : a, b, c, ...
  2. 숫자 : 1, 2, 3, ...
  3. 방향키 : up, down, left, right
  4. 숫자패트 : [1], [2], [+], ...
  5. Modifier 키 : left shift, right ctrl, ...
  6. 특수키 : backspace, return, tap, ...
  7. 펑션키 : f1, f2, f3, ...
  8. 마우스 버튼 : mouse 0, mouse 1, mouse 2, ...
  9. 조이스틱 버튼 : joystick button 0, joystick button 1, ...
  10. 특정 조이스틱 특정 버튼 : joystick 1 button 0, joystick 1 button 1, ...

코드의 사용법은 다음과 같다.

float tmp = Input.GetAxis(string);
float tmp2 = Input.GetAxisRaw(string);

if(Input.GetMouseButtonDown(string))
if(Input.GetMouseButton(string))
if(Input.GetMouseButtonUp(string))

if(Input.GetKeyDown(string))
if(Input.GetKey(string))
if(Input.GetKeyUp(string))

인자로 전달되는 string에는 사용하고픈 Axis의 이름을 전달해준다.


GetAxis와 GetAxisRaw의 비교

  • 공통점
    - -1 ~ 1사이의 값을 반환한다.

  • 차이점
    - GetAxis는 입력을 받는 즉시 0부터 -1또는 1까지 값이 순차적으로 증가한다.
    - GetAxisRaw는 입력을 받는 즉시 -1또는 1을 반환한다.


오브젝트의 움직임으로 예시를 들자면,
Axis를 사용하여 움직이는 오브젝트는 가속을 받아 최고속도로 도달하는 것처럼 보이고,
AxisRaw를 사용하여 움직이는 오브젝트는 입력을 받는 순간 최고속도로 움직이는 것처럼 보여진다.


많이 사용하는 Axis

  1. Horizontal
    - 오브젝트의 좌, 우 움직임을 담당한다.
    - -1은 좌방향, 1은 우방향이다.
  1. Vertical
    - 오브젝트의 (3D)앞, 뒤 또는 (2D)상, 하의 움직임을 담당한다.
    - -1은 뒤방향 또는 하방향, 1은 앞방향 또는 상방향이다.
  1. Jump
    - 오브젝트의 위의 움직임을 담당한다.

profile
이제 막 시작하는 유니티 클라이언트

0개의 댓글