Input은 외부에서 들어오는 입력값을 관리하는 클래스다. 최근에 추가된 InputSystem도 있지만 다음에 설명하겠다.
유니티는 자주 사용하는 키보드, 마우스, 조이스틱 입력에 대한 조합을 미리 정의해 놓왔고 InputManager에서 관리한다.
입력 관리자
Input Manager 창에서 프로젝트에 대한 입력 축 및 축과 관련된 행동을 정의할 수 있습니다. 액세스하려면 Unity의 메인 메뉴에서 Edit > Project Settings로 이동한 후 오른쪽 내비게이션에서 Input Manager를 선택합니다.
입력 관리자는 다음 타입의 컨트롤을 사용합니다.
- 키는 W 키, Shift 키, 스페이스바 등과 같은 물리적 키보드의 모든 키를 의미합니다.
- 버튼은 리모콘의 X 버튼처럼 물리적 컨트롤러(예: 게임패드)에 있는 버튼을 가리킵니다.
- 가상 축(복수형: 축)은 버튼, 키 등과 같은 컨트롤에 매핑됩니다. 사용자가 컨트롤을 활성화하면 축은 [–1..1] 범위의 값을 수신합니다. 이 값은 스크립트에서 사용할 수 있습니다. Horizontal, Vertical, Fire1, Fire2, Mouse X와 같은 추상적인 개념의 이름으로 정의되어 있다.
Input.GetKey("a")와 같이 위에 명시된 명명 규칙을 사용하여 특정 키 또는 버튼에 대한 입력을 쿼리할 수도 있습니다. 예를 들면 다음과 같습니다.
스크립트에서 가상 축 사용
스크립트에서 가상 축에 액세스하기 위해 축 이름을 사용할 수 있습니다.
예를 들어 Horizontal 축의 현재 값을 쿼리하고 변수에 저장하려면 다음과 같이 Input.GetAxis를 사용할 수 있습니다.
Input.GetAxis("Input Manager Axes 이름")으로 값을 얻어 올수 있다.
Input.GetAxis는 -1.0f~1.0f의 변화하는 값을 얻어오는데, 누루고 있으면 0f에서 -1f나 1f로 가속되는 값이 리턴된다.
Input.GetAxisRaw -1.0f, 0f, 1.0f의 3개중 하나의 값이 전달된다.
움직임이 아니라 이벤트(예: 게임 내에서 무기 발사)를 설명하는 축의 경우에는 대신에 Input.GetButtonDown을 사용하십시오.
두 개 이상의 축이 동일한 이름을 사용하는 경우 쿼리는 절대값이 가장 큰 축을 반환합니다. 따라서 축 이름에 두 개 이상의 입력 기기를 할당할 수 있습니다.
예를 들어 Horizontal이라는 이름으로 두 개의 축을 만든 후 하나는 키보드 입력에 할당하고 다른 하나는 조이스틱 입력에 할당할 수 있습니다. 사용자가 조이스틱을 사용하는 경우 입력은 조이스틱에서 수신되고 키보드 입력은 null입니다. 그렇지 않으면 입력은 키보드에서 수신되고 조이스틱 입력은 null입니다. 이를 통해 여러 컨트롤러의 입력을 처리하는 단일 스크립트를 작성할 수 있습니다.
예제
Horizontal 및 Vertical 축의 입력과 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과 곱하면 게임 오브젝트가 프레임마다 일정한 속도로 움직입니다.
Input class는 다음과 같은 함수들을 지원하면 눌렸을때 눌리고 있을때 떨어졌을때를 구별할 수 있습니다.
GetAccelerationEvent | Returns specific acceleration measurement which occurred during last frame. (Does not allocate temporary variables). |
GetAxis | Returns the value of the virtual axis identified by axisName. |
GetAxisRaw | Returns the value of the virtual axis identified by axisName with no smoothing filtering applied. |
GetButton | Returns true while the virtual button identified by buttonName is held down. |
GetButtonDown | Returns true during the frame the user pressed down the virtual button identified by buttonName. |
GetButtonUp | Returns true the first frame the user releases the virtual button identified by buttonName. |
GetJoystickNames | Retrieves a list of input device names corresponding to the index of an Axis configured within Input Manager. |
GetKey | Returns true while the user holds down the key identified by name. |
GetKeyDown | Returns true during the frame the user starts pressing down the key identified by name. |
GetKeyUp | Returns true during the frame the user releases the key identified by name. |
GetMouseButton | Returns whether the given mouse button is held down. |
GetMouseButtonDown | Returns true during the frame the user pressed the given mouse button. |
GetMouseButtonUp | Returns true during the frame the user releases the given mouse button. |
GetTouch | Call Input.GetTouch to obtain a Touch struct. |
IsJoystickPreconfigured | Determine whether a particular joystick model has been preconfigured by Unity. (Linux-only). |
ResetInputAxes | Resets all input. After ResetInputAxes all axes return to 0 and all buttons return to 0 for one frame. |
'유니티게임강좌 > 주인공 캐릭터 제작' 카테고리의 다른 글
[Player제작] 접근제한자 (0) | 2023.02.25 |
---|---|
[Player제작] 캐릭터의 이동 (0) | 2023.02.25 |
[Player제작] 유니티 Class 종류 (0) | 2023.02.25 |
[Player제작] 스크립트 (0) | 2023.02.25 |
[Player제작] 3D 모델 불러오기 (0) | 2023.02.25 |