Menu
CoddyTech

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

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

challenge icon

Задание

Средне

Запусти спринтера клавишей пробела: вниз — присесть, вверх — бежать.

  1. В Update(), если !running и Keyboard.current.spaceKey.wasPressedThisFrame: установи set, перемести вниз на crouch, выведи в журнал Set.
  2. Если set и wasReleasedThisFrame: сбрось set, установи running, перемести вверх на crouch, выведи в журнал Go!.
  3. Пока 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! и побежать.
    }
}

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

Потренируйтесь самостоятельно: Песочница Unity