Menu
CoddyTech

Нажатие в текущем кадре

Часть раздела Создание настоящих игр путешествия по 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 один раз при каждом нажатии пробела.

challenge icon

Задание

Средне

Спринтер ждёт в стартовых колодках. В его скрипте заданы 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! и побежать.
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Создание настоящих игр