Клавиатура и мышь
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 45 из 60.
Система ввода предоставляет каждому устройству объект. 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.
Задание
СреднеУправляй воздушным шаром с помощью Keyboard.current и Mouse.current.
- Пока
rightArrowKeyилиdKeyisPressed, двигайся по оси +x со скоростьюdriftединиц в секунду; при нажатииleftArrowKeyилиaKey— по оси -x. bool burner— это состояние нажатияspaceKeyилиleftButton; вызовиflame.SetActive(burner);.- Горелка включена — поднимайся со скоростью
rise; выключена — опускайся со скоростьюsink, но не нижеgroundY.
Нажми «Играть» и лети: удерживай пробел или кнопку мыши, чтобы подниматься. Затем нажми «Проверить».
Попробуйте сами
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Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке3Менеджер игры
Один скрипт управляет игройОдиночкаСостояния игрыПереключение состоянияПовторение: менеджер раундов6Проект: Бесконечный раннер
Три полосыПрепятствия впереди9Новая система ввода
Две системы вводаКлавиатура и мышьНажатие в текущем кадреДействия вводаПовторение: смена системы вводаПотренируйтесь самостоятельно: Песочница Unity