Нажатие в текущем кадре
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 45 из 56.
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 один раз при каждом нажатии пробела.
Задание
СреднеСпринтер ждёт в стартовых колодках. В его скрипте заданы speed (6) и crouch (0.3).
- Когда клавиша Space нажата, бегун приседает в колодки: перемещается вниз на
crouchединиц, и в журнал записываетсяSet. - Когда после этого клавиша Space отпущена, бегун снова встаёт (вверх на
crouchединиц), в журнал записываетсяGo!и начинается бег: с этого момента он бежит вдоль оси +z со скоростьюspeedединиц в секунду. - Если удерживать Space,
Setзаписывается в журнал один раз, а не каждый кадр. Когда бегун уже бежит, клавиша Space больше ни на что не влияет.
Считывай нажатие Space с помощью Keyboard.current. Нажми Play, удерживай Space и отпусти её, затем нажми Check.
Попробуйте сами
using UnityEngine;
using UnityEngine.InputSystem;
public class Sprinter : MonoBehaviour
{
public float speed = 6f;
public float crouch = 0.3f;
void Update()
{
// При нажатии Space: присесть и вывести в журнал Set. При отпускании Space: встать, вывести в журнал Go! и побежать.
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке3Менеджер игры
Один скрипт управляет игройОдиночкаСостояния игрыПереключение состоянияПовторение: менеджер раундов6Проект: бесконечный раннер
Три полосыПрепятствия впереди9Новая система ввода
Две системы вводаКлавиатура и мышьНажатие в текущем кадреДействия вводаПовторение: смена системы ввода