Создание сцены и игровых объектов
Создадим новую сцену: Файл -> Новая сцена, выберем 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 и более объектов). Запустим и протестируем игру.
Игра проста, но демонстрирует базовые концепции курса.