Клавиатура и мышь
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 44 из 56.
Input System предоставляет каждому устройству объект. Keyboard.current — это клавиатура, а каждая клавиша на ней — элемент управления со своим именем: spaceKey, aKey, upArrowKey или Keyboard.current[Key.Space] для доступа к любой клавише по её значению Key. 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() возвращает положение указателя в виде Vector2 в экранных пикселях от нижнего левого угла, как и Input.mousePosition.
Задание
СреднеУправляй воздушным шаром с помощью Input System. В его скрипте есть drift (2), rise (3), sink (1), groundY (2) и flame — пламя горелки под шаром.
- Пока удерживается клавиша со стрелкой вправо или D, шар движется вправо (вдоль +x) со скоростью
driftединиц в секунду; пока удерживается клавиша со стрелкой влево или A, он движется влево. - Горелка включена, пока удерживается пробел или левая кнопка мыши. Отображай
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 или мышью
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке3Менеджер игры
Один скрипт управляет игройОдиночкаСостояния игрыПереключение состоянияПовторение: менеджер раундов6Проект: бесконечный раннер
Три полосыПрепятствия впереди9Новая система ввода
Две системы вводаКлавиатура и мышьНажатие в текущем кадреДействия вводаПовторение: смена системы ввода