Menu
CoddyTech

Клавиатура и мышь

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 44 из 56.

Input System предоставляет каждому устройству объект. 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.

challenge icon

Задание

Средне

Управляй воздушным шаром с помощью Input System. В его скрипте есть drift (2), rise (3), sink (1), groundY (2) и flame — пламя горелки под шаром.

  • Пока удерживается клавиша со стрелкой вправо или D, шар движется вправо (вдоль +x) со скоростью drift единиц в секунду; пока удерживается клавиша со стрелкой влево или A, он движется влево.
  • Горелка включена, пока удерживается пробел или левая кнопка мыши. Отображай flame, только пока горелка включена.
  • Когда горелка включена, шар поднимается со скоростью rise единиц в секунду. Когда она выключена, шар опускается со скоростью sink единиц в секунду и никогда не опускается ниже groundY.

Используй Keyboard.current и Mouse.current. Этот проект настроен как новый проект Unity 6 (Active Input Handling: Input System Package), поэтому класс Input здесь вызывает InvalidOperationException. Нажми Play и полетай, затем нажми Check.

Попробуйте сами

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 или мышью
    }
}
quiz iconПроверьте себя

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

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