Нажатие в текущем кадре
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 46 из 60.
isPressed отвечает на вопрос «нажата ли кнопка сейчас?» на каждом кадре, пока её удерживают. Если действие должно выполниться один раз при нажатии, у элемента управления есть ещё два состояния: wasPressedThisFrame равно true только в кадре, когда клавиша или кнопка была нажата, а wasReleasedThisFrame — только в кадре, когда её отпустили. Они заменяют Input.GetKeyDown и Input.GetKeyUp, а также GetMouseButtonDown и GetMouseButtonUp. Этот штамп опускается при нажатии кнопки мыши и поднимается, когда её отпускают:
using UnityEngine;
using UnityEngine.InputSystem;
public class Stamp : MonoBehaviour
{
public float drop = 0.5f;
private int stamps;
void Update()
{
Mouse mouse = Mouse.current;
if (mouse.leftButton.wasPressedThisFrame)
{
transform.position += Vector3.down * drop;
stamps++;
Debug.Log("Stamp " + stamps);
}
if (mouse.leftButton.wasReleasedThisFrame)
{
transform.position += Vector3.up * drop;
}
}
}Если удерживать щелчок полсекунды, в журнал один раз выведется Stamp 1, штамп один раз опустится и один раз поднимется. Если в первом if использовать isPressed, тот же щелчок выведет около 30 отметок и погрузит штамп в стол на 15 единиц. Клавиши работают так же: Keyboard.current.spaceKey.wasPressedThisFrame принимает значение true один раз при каждом нажатии пробела.
Задание
СреднеЗапусти спринтера клавишей пробела: вниз — присесть, вверх — бежать.
- В
Update(), если!runningиKeyboard.current.spaceKey.wasPressedThisFrame: установиset, перемести вниз наcrouch, выведи в журналSet. - Если
setиwasReleasedThisFrame: сбросьset, установиrunning, перемести вверх наcrouch, выведи в журналGo!. - Пока
running, перемещайся вдоль +z со скоростьюspeedединиц в секунду.
Нажми «Играть», удерживай пробел и отпусти: в Console появятся Set, затем Go!. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
using UnityEngine.InputSystem;
public class Sprinter : MonoBehaviour
{
public float speed = 6f;
public float crouch = 0.3f;
private bool set;
private bool running;
void Update()
{
// При нажатии Space: присесть и вывести в лог Set. При отпускании Space: встать, вывести в лог Go! и побежать.
}
}
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке3Менеджер игры
Один скрипт управляет игройОдиночкаСостояния игрыПереключение состоянияПовторение: менеджер раундов6Проект: Бесконечный раннер
Три полосыПрепятствия впереди9Новая система ввода
Две системы вводаКлавиатура и мышьНажатие в текущем кадреДействия вводаПовторение: смена системы вводаПотренируйтесь самостоятельно: Песочница Unity