키보드와 마우스
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 44번째.
Input System은 각 장치에 객체를 제공합니다. Keyboard.current는 키보드이며, 키보드의 각 키는 이름이 있는 컨트롤입니다. spaceKey, aKey, upArrowKey 또는 Key 값으로 임의의 키를 지정하는 Keyboard.current[Key.Space]가 있습니다. Mouse.current는 마우스이며, leftButton, rightButton 및 position을 포함합니다. 컨트롤의 isPressed는 해당 컨트롤을 누르고 있는 모든 프레임에서 true이며, Input.GetKey와 같습니다. 이 잠수함은 방향키로 잠수하고 수면으로 올라오며, 마우스 버튼을 누르고 있는 동안 탐조등을 켭니다:
using UnityEngine;
using UnityEngine.InputSystem;
public class Submarine : MonoBehaviour
{
public float diveSpeed = 2f;
public Light searchlight;
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard == null) return; // 키보드가 연결되어 있지 않음
if (keyboard.downArrowKey.isPressed)
transform.position += Vector3.down * diveSpeed * Time.deltaTime;
if (keyboard.upArrowKey.isPressed)
transform.position += Vector3.up * diveSpeed * Time.deltaTime;
searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
}
}current는 마지막으로 사용된 장치이며, 해당 장치가 없으면 null입니다. 휴대폰이나 콘솔에는 키보드가 없을 수 있으며, null 검사를 하면 이 환경에서 스크립트가 예외를 발생시키지 않습니다. 키보드에는 축이 없으므로 아래쪽 화살표와 S는 서로 별개의 키입니다. S를 눌러도 잠수해야 하는 잠수함이라면 keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed를 검사합니다. Mouse.current.position.ReadValue()는 Input.mousePosition과 같이 화면 왼쪽 아래 모서리부터의 픽셀 위치로 포인터를 나타내는 Vector2를 반환합니다.
챌린지
중급Input System으로 열기구를 조종하세요. 스크립트에는 drift(2), rise(3), sink(1), groundY(2), 그리고 열기구 아래에 있는 버너의 불꽃인 flame이 있습니다.
- 오른쪽 화살표 키 또는 D를 누르고 있는 동안 열기구는 초당
drift단위만큼 오른쪽(+x 방향)으로 이동하고, 왼쪽 화살표 키 또는 A를 누르고 있는 동안에는 왼쪽으로 이동합니다. - Space 또는 마우스 왼쪽 버튼을 누르고 있는 동안 버너가 켜집니다. 버너가 켜져 있을 때만
flame을 표시하세요. - 버너가 켜져 있으면 열기구는 초당
rise단위만큼 상승합니다. 버너가 꺼져 있으면 초당sink단위만큼 하강하며,groundY아래로는 내려가지 않습니다.
Keyboard.current와 Mouse.current를 사용하세요. 이 프로젝트는 새 Unity 6 프로젝트처럼 설정되어 있어(Active Input Handling: Input System Package), 여기서는 Input 클래스가 InvalidOperationException을 발생시킵니다. Play를 누르고 조종한 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
using UnityEngine.InputSystem;
public class Balloon : MonoBehaviour
{
public float drift = 2f;
public float rise = 3f;
public float sink = 1f;
public float groundY = 2f;
public GameObject flame;
void Update()
{
// 방향키 또는 A와 D로 표류하고, Space 또는 마우스로 불을 붙입니다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.