Unity C# #10: Мини-игра за 1 урок

Создание сцены и игровых объектов

Создадим новую сцену: Файл -> Новая сцена, выберем Basic Built-in и нажмём Создать. Сохраним её как «GameScene» (Ctrl+S или Cmd+S).

Игра: игрок перемещается по поверхности, собирает объекты; информация о собранных объектах выводится текстом. После сбора всех объектов отображается сообщение о победе.

Создадим 3D-куб для игровой поверхности (X=0, Y=0.1, Z=0; размеры: X=20, Y=0.1, Z=20; оранжевый цвет).

Добавим сферу – игрока (X=0, Y=1, Z=0). Добавим компонент Rigidbody (сфера будет падать на платформу). Назовём объект «Player».

Создадим четыре куба-бортика, чтобы игрок не вылетал за пределы платформы:

  • Куб 1: X=10, Y=0, Z=20
  • Куб 2: X=-10, Y=0, Z=20
  • Куб 3: X=10, Y=0, Z=-20
  • Куб 4: X=-10, Y=0, Z=-20

Выделим пять кубов (платформу и бортики), создадим пустой объект «Platform» и сделаем кубы его дочерними объектами.

Скрипт PlayerController

Создадим C# скрипт PlayerController. Удалим ненужные using директивы. Переменные:

public float speed;
private Rigidbody rb;

Метод Awake:

void Awake() {
    rb = GetComponent<Rigidbody>();
}

Метод FixedUpdate:

void FixedUpdate() {
    float moveHorizontal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");
    Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
    rb.AddForce(movement * speed * Time.fixedDeltaTime);
}

Прикрепим скрипт к «Player». Запустим проект. Возможно, потребуется настроить speed и убрать блокировку вращения (Freeze Rotation) для сферы.

Добавление собираемых объектов

Добавим маленькие синие кубы (размер 0.5) с тегом «CollectibleCube».

Текстовая надпись

Добавим Canvas с текстовой надписью для счёта. Параметры Canvas: Screen Space — Overlay и Render Mode — Screen Space — Camera. Прикрепим Canvas к основной камере. Настроим расположение текста (Rect Tool), шрифт, размер, выравнивание. Начальный текст: «Счет: 0».

Доработка PlayerController: сбор объектов

В PlayerController добавим метод OnTriggerEnter:

void OnTriggerEnter(Collider other) {
    if (other.CompareTag("CollectibleCube")) {
        Destroy(other.gameObject);
        score++;
        scoreText.text = "Счет: " + score;
        if (score >= 5) {
            scoreText.text = "Победа!";
        }
    }
}

Добавим публичное поле:

public Text scoreText;

В Awake инициализируем score = 0. В OnTriggerEnter удаляем объект, увеличиваем score и обновляем текст на Canvas. Условие для сообщения о победе (5 и более объектов). Запустим и протестируем игру.

Игра проста, но демонстрирует базовые концепции курса.

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