Unity C#: Отслеживание нажатий и перемещение объекта

Подготовка и переменные

Для работы потребуется кубик (добавьте его, если отсутствует). Скрипт будет прикреплён к Directional Light. Создадим следующие переменные:

  • public GameObject object; — переменная типа GameObject, содержащая ссылку на кубик.
  • public float Range = 5f; — переменная типа float, определяющая дистанцию перемещения (по умолчанию 5 единиц).

Отслеживание нажатий с помощью GetAxis

В методе Update будем обрабатывать пользовательский ввод с помощью GetAxis. GetAxis отслеживает нажатия клавиш A, D, стрелок влево/вправо, возвращая значение от -1 до 1 (1 — при полном нажатии).

Оси (Horizontal — A, D, стрелки влево/вправо; Vertical — W, S, стрелки вверх/вниз) определены в Edit -> Project Settings -> Input.

Добавим переменную float h = Input.GetAxis("Horizontal"); для хранения значения горизонтальной оси. Перемещение кубика по оси X осуществим с помощью float xPosition = h * Range;:

object.transform.position = new Vector3(xPosition, 0, 0);

Нажатие A или D (или стрелок влево/вправо) будет перемещать кубик влево или вправо на дистанцию Range. Не забудьте прикрепить ссылку на кубик к переменной object в инспекторе Directional Light.

Управление движением и поворотом кубика

Добавим код для управления движением и поворотом кубика с помощью стрелок:

float moveSpeed = 3f;
float turnSpeed = 40f;

if (Input.GetKey(KeyCode.UpArrow))
    object.transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
if (Input.GetKey(KeyCode.DownArrow))
    object.transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
if (Input.GetKey(KeyCode.LeftArrow))
    object.transform.Rotate(Vector3.up * turnSpeed * Time.deltaTime);
if (Input.GetKey(KeyCode.RightArrow))
    object.transform.Rotate(-Vector3.up * turnSpeed * Time.deltaTime);

Time.deltaTime обеспечивает плавность движения, независимо от частоты кадров. Предыдущий код перемещения по оси X (object.transform.position = new Vector3(xPosition, 0, 0);) следует закомментировать во избежание конфликтов.

Изменение размера кубика

Создадим скрипт Scale с функцией OnMouseDown:

void OnMouseDown()
{
    transform.localScale = new Vector3(transform.localScale.x / 2f, transform.localScale.y / 2f, transform.localScale.z / 2f);
}

Эта функция уменьшает масштаб кубика вдвое при нажатии левой кнопки мыши. Кубик должен иметь компонент Box Collider, так как OnMouseDown работает только с объектами, имеющими коллайдер.

В этом уроке мы изучили отслеживание нажатий клавиш с помощью GetAxis и GetKey, управление движением и поворотом объекта, а также изменение его размера при нажатии мышью. Использовались Time.deltaTime для плавности анимаций и OnMouseDown для обработки событий нажатия.

Что будем искать? Например,программа