C# Unity: Отслеживание действий пользователя в игре

Создание сцены и скрипта

Создайте новую сцену: File -> New Scene, выберите Basic Built-in (с камерой и светом), нажмите Create. Сохраните сцену: Cmd+S (macOS) или Ctrl+S (Windows). Назовите сцену UserInput.

Создайте новый скрипт EnableLight. Этот скрипт будет включать/выключать свет при нажатии кнопки. Поместите скрипт на основную камеру и сохраните сцену.

Скрипт EnableLight

Откройте скрипт EnableLight в Visual Studio. Удалите ненужные подключения и методы. Создайте поле для ссылки на компонент света:

public Light mainLight;

В методе Update отслеживайте нажатие пробела:

void Update()
{
    if (Input.GetKeyUp(KeyCode.Space))
    {
        mainLight.enabled = !mainLight.enabled;
    }
}

Input.GetKeyUp(KeyCode.Space) срабатывает один раз при отпускании клавиши пробела. mainLight.enabled устанавливает противоположное значение активности компонента света. Перетащите Directional Light на поле mainLight в Unity. Запустите Unity и проверьте работу скрипта.

Изменение цвета объекта

Создайте сферу и новый скрипт ChangeColors. Поместите скрипт на сферу. В скрипте создайте приватное поле для компонента MeshRenderer:

private MeshRenderer mesh;

В методе Awake найдите компонент:

void Awake()
{
    mesh = GetComponent<MeshRenderer>();
}

В методе Update отслеживайте нажатие клавиш и меняйте цвет:

void Update()
{
    if (Input.GetKeyDown(KeyCode.G))
    {
        mesh.material.color = Color.green;
    }
    if (Input.GetKeyDown(KeyCode.R))
    {
        mesh.material.color = Color.red;
    }
    if (Input.GetKeyDown(KeyCode.B))
    {
        mesh.material.color = Color.blue;
    }
}

Input.GetKeyDown() срабатывает при нажатии клавиши. Запустите Unity и проверьте работу скрипта.

Перемещение объекта

Создайте новый скрипт MovePlayer и поместите его на сферу. В методе Update отслеживайте нажатие клавиш со стрелками и клавиш W, S, A, D для перемещения сферы:

public float speed = 5f;

void Update()
{
    float verticalInput = Input.GetAxis("Vertical");
    float horizontalInput = Input.GetAxis("Horizontal");
    
    transform.Translate(Vector3.forward * verticalInput * speed * Time.deltaTime);
    transform.Translate(Vector3.right * horizontalInput * speed * Time.deltaTime);
}

Input.GetAxis("Vertical") и Input.GetAxis("Horizontal") возвращают значения от -1 до 1 в зависимости от нажатых клавиш. Time.deltaTime обеспечивает плавное перемещение независимо от частоты кадров.

Вы научились отслеживать нажатия клавиш и использовать полученную информацию для взаимодействия с игровыми объектами, изменяя их состояние (активность, цвет) и положение. Этот подход позволяет создавать интерактивные элементы управления в играх на Unity.

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