Version: 2021.3
언어: 한국어
입력
모바일 디바이스 입력

입력 관리자

Input Manager 창에서 프로젝트에 대한 입력 축 및 축과 관련된 행동을 정의할 수 있습니다. 액세스하려면 Unity의 메인 메뉴에서 Edit > Project Settings로 이동한 후 오른쪽 내비게이션에서 Input Manager를 선택합니다.

입력 관리자는 다음 타입의 컨트롤을 사용합니다.

  • 는 W 키, Shift 키, 스페이스바 등과 같은 물리적 키보드의 모든 키를 의미합니다.
  • 버튼은 리모콘의 X 버튼처럼 물리적 컨트롤러(예: 게임패드)에 있는 버튼을 가리킵니다.
  • 가상 축(복수형: )은 버튼, 키 등과 같은 컨트롤에 매핑됩니다. 사용자가 컨트롤을 활성화하면 축은 [–1..1] 범위의 값을 수신합니다. 이 값은 스크립트에서 사용할 수 있습니다.

물리 키

물리 키 옵션을 사용하면 다른 지역의 사용자 간에 다를 수 있는 언어별 레이아웃이 아닌 물리 키보드 레이아웃에 키 코드를 매핑할 수 있습니다.

예를 들어 일부 키보드에서는 문자의 첫 번째 행을 “QWERTY”라고 읽고 다른 키보드에서는 “AZERTY”라고 읽습니다. 즉 이동에 대해 잘 알려진 "WASD" 키를 사용하기 위해 특정 컨트롤을 스크립팅하면 AZERTY 레이아웃 키보드에서 물리적으로 배열이 올바르지 않을 수 있습니다(예: 화살표 키 배열).

물리 키를 활성화하면 Unity는 일반 ANSI/ISO “Qwerty" 레이아웃을 사용하여 사용자의 실제 레이아웃과 상관 없이 키의 물리적 위치를 나타냅니다. 즉 ”Q“ 키를 지정하면 사용자의 키보드가 해당 위치에 다른 글자가 있더라도 ”Q" 키는 글자 키의 첫 번째 열 가장 왼쪽에 있습니다.

게임 내 텍스트 입력에 대해 키 입력을 읽어서는 안 됩니다. 사용자가 라틴어가 아닌 글자는 입력할 수 없기 때문입니다. 대신 Input.compositionString을 사용합니다.

가상 축

생성하는 모든 프로젝트에는 기본적으로 여러 입력 축이 생성되어 있습니다. 이러한 축을 사용하면 프로젝트에서 키보드, 마우스 및 조이스틱 입력을 바로 사용할 수 있습니다.

이러한 축에 대한 자세한 내용을 보려면 Input Manager 창을 열고 축 이름 옆에 있는 화살표를 클릭하여 프로퍼티를 확장하십시오.

각 입력 축에는 다음의 프로퍼티가 있습니다.

프로퍼티 기능
Name 축 이름입니다. 스크립트에서 축에 액세스할 때 사용할 수 있습니다.
Descriptive Name, Descriptive Negative Name 이러한 값은 더 이상 지원되지 않고 작동하지 않습니다. 이전에는 시작 시 Rebind Controls 화면에서 사용자에게 표시되었지만, 이 화면도 지원이 중지되었습니다.
Negative Button, Positive Button 축을 음의 방향과 양의 방향으로 각각 미는 데 사용하는 컨트롤입니다. 키보드의 키이거나 조이스틱 또는 마우스의 버튼일 수 있습니다.
Alt Negative Button, Alt Positive Button 축을 음의 방향과 양의 방향으로 각각 미는 데 사용하는 대체 컨트롤입니다
Gravity 아무 입력도 없을 때 축이 중립쪽으로 떨어지는 속도(초 단위)입니다.
Dead 애플리케이션이 움직임을 등록할 수 있도록 사용자가 아날로그 스틱을 움직여야 하는 정도입니다. 런타임 시점에 이 범위 내에 있는 모든 아날로그 기기의 입력은 null로 간주됩니다.
Sensitivity 축이 대상의 값으로 향하기 위한 속도(초 단위)입니다. 디지털 장치 전용입니다.
Snap 활성화되어 있는 경우 반대 방향에 해당하는 버튼을 누르면 축 값이 0으로 초기화됩니다.
타입 축을 제어하는 ​​입력 타입입니다. 다음 값 중에서 선택하십시오.

- 키 또는 마우스 버튼
- 마우스 이동
- 조이스틱 축
Axis 이 축을 제어하는 연결된 기기의 축입니다.
JoyNum 이 축을 제어하는 ​​연결된 조이스틱입니다. 특정 조이스틱을 선택하거나, 모든 조이스틱에서 입력을 쿼리할 수 ​​있습니다.

축 값은 다음과 같습니다.

  • 조이스틱 및 키보드 입력의 경우 –1과 1 사이입니다. 이러한 축의 중립 위치는 0입니다. 키보드 버튼 같은 일부 타입의 컨트롤은 입력 강도에 민감하지 않으므로 –1, 0 또는 1 이외의 값을 생성할 수 없습니다.
  • 마우스 입력에 대한 마우스 델타(마지막 프레임 동안 마우스가 이동한 정도)입니다. 마우스 입력 축의 값은 사용자가 마우스를 빠르게 움직일 때 1보다 크거나 –1보다 작을 수 있습니다.

가상 축 추가, 제거 및 복사

가상 축을 추가하려면 Size 필드의 숫자를 높이십시오. 이렇게 하면 리스트 하단에 새로운 축이 생성됩니다. 새로운 축은 리스트에 있는 이전 축의 프로퍼티를 복사합니다.

가상 축을 제거하려면 다음 중 하나를 수행하십시오.

  • Size 필드의 숫자를 낮춥니다. 그러면 리스트의 맨 마지막 축이 제거됩니다.
  • 축을 마우스 오른쪽 버튼으로 클릭하고 Delete Array Element를 선택합니다.
    참고: 이 작업은 되돌릴 수 없습니다.

가상 축을 복사하려면 마우스 오른쪽 버튼으로 클릭하고 Duplicate Array Element를 선택하십시오.

가상 축을 컨트롤에 매핑

키 또는 버튼을 축에 매핑하려면 입력 관리자의 Positive Button 또는 Negative Button 프로퍼티에 해당 이름을 입력하십시오.

키 이름은 다음의 명명 규칙을 따릅니다.

키 패밀리 명명 규칙
문자 키 a, b, c
숫자 키 1, 2, 3
화살표 키 up, down, left, right
숫자패드 키 [1], [2], [3], [+], [equals]
수정 키 right shift, left shift, right ctrl, left ctrl, right alt, left alt, right cmd, left cmd
특수 키 backspace, tab, return, escape, space, delete, enter, insert, home, end, page up, page down
기능 키 f1, f2, f3

마우스 버튼의 이름은 mouse 0, mouse 1, mouse 2 등으로 지정됩니다.

조이스틱 버튼은 다음의 명명 규칙을 따릅니다.

버튼 원점 명명 규칙
조이스틱의 특정 버튼입니다. joystick button 0, joystick button 1, joystick button 2
특정 조이스틱의 특정 버튼입니다. joystick 1 button 0, joystick 1 button 1, joystick 2 button 0

Input.GetKey와 위에 명시된 명명 규칙을 사용하여 특정 키 또는 버튼에 대한 입력을 쿼리할 수도 있습니다. 예를 들면 다음과 같습니다.

Input.GetKey("a");

또 다른 키 액세스 방법은 KeyCode 열거형을 사용하는 것입니다.

스크립트에서 가상 축 사용

스크립트에서 가상 축에 액세스하기 위해 축 이름을 사용할 수 있습니다.

예를 들어 Horizontal 축의 현재 값을 쿼리하고 변수에 저장하려면 다음과 같이 Input.GetAxis를 사용할 수 있습니다.

float horizontalInput = Input.GetAxis ("Horizontal");

움직임이 아니라 이벤트(예: 게임 내에서 무기 발사)를 설명하는 축의 경우에는 대신에 Input.GetButtonDown을 사용하십시오.

두 개 이상의 축이 동일한 이름을 사용하는 경우 쿼리는 절대값이 가장 큰 축을 반환합니다. 따라서 축 이름에 두 개 이상의 입력 기기를 할당할 수 있습니다.

예를 들어 Horizontal이라는 이름으로 두 개의 축을 만든 후 하나는 키보드 입력에 할당하고 다른 하나는 조이스틱 입력에 할당할 수 있습니다. 사용자가 조이스틱을 사용하는 경우 입력은 조이스틱에서 수신되고 키보드 입력은 null입니다. 그렇지 않으면 입력은 키보드에서 수신되고 조이스틱 입력은 null입니다. 이를 통해 여러 컨트롤러의 입력을 처리하는 단일 스크립트를 작성할 수 있습니다.

예제

HorizontalVertical 축의 입력과 transform.Translate 메서드를 사용하여 XZ 공간(전방, 후방, 왼쪽, 오른쪽)에서 게임 오브젝트를 움직일 수 있습니다. 움직이려는 게임 오브젝트에 연결된 스크립트의 update() 메서드에 다음 코드를 추가하십시오.

float moveSpeed = 10;
//Define the speed at which the object moves.

float horizontalInput = Input.GetAxis("Horizontal");
//Get the value of the Horizontal input axis.

float verticalInput = Input.GetAxis("Vertical");
//Get the value of the Vertical input axis.

transform.Translate(new Vector3(horizontalInput, verticalInput, 0) * moveSpeed * Time.deltaTime);
//Move the object to XYZ coordinates defined as horizontalInput, 0, and verticalInput respectively.

Time.deltaTime은 마지막 프레임 이후 경과한 시간을 나타냅니다. moveSpeed 변수를 Time.deltaTime과 곱하면 게임 오브젝트가 프레임마다 일정한 속도로 움직입니다.

입력
모바일 디바이스 입력