Разработка

Создание первого VR-приложения

Это руководство поможет вам создать свое первое VR-приложение в Unity. Это базовое приложение, которое поможет вам ознакомиться с основными понятиями Unity, такими как 3D-объекты, компоненты и настройки сборки. В нем не используется пакет Oculus Integration, поскольку цель этого урока — познакомить вас с основными понятиями и интерфейсом Unity. В конце у вас будет VR-приложение, готовое к запуску на компьютере.

Что это за приложение?

Это просто игра. Сцена содержит игровую зону, окруженную четырьмя стенами, и шарик, который выступает в роли игрока. Цель игры — перекатывать шарик так, чтобы он не сталкивался со стенами. Если он столкнется с одной из стен, цвет стены должен измениться, а на экране должен появиться текст, сообщающий о столкновении. Для ввода вам нужно использовать клавиатуру или джойстики, совместимые с Unity.
Вот что мы будем создавать:

Видео: демонстрация движения мяча и его поведения при столкновении со стенками.

Предварительные требования

Прежде чем приступить к этому уроку, убедитесь, что вы установили среду разработки и выполнили необходимые настройки.
  1. Установите Unity и создайте проект, следуя инструкциям из раздела Настройка Unity для VR-разработки.
  2. Выполните действия из руководства по настройке гарнитуры для разработки.
  3. Настройка параметров сборки.

Основные понятия

В этом разделе рассказывается об основах создания приложений или игровых механик. Мы объясняем только основные понятия, связанные с рабочим процессом, которые пригодятся при создании этого VR-приложения. Подробнее о понятиях и рабочих процессах Unity см. в руководстве пользователя Unity.
  • Сцена — это контейнер, в котором хранятся различные игровые объекты.
  • Игровые объекты — это фундаментальные объекты, представляющие персонажей, реквизит, свет, камеру или спецэффекты. В этом приложении мы будем использовать 3D-объекты, состоящие из примитивных форм, таких как плоскость, куб и сфера.
  • Компоненты определяют поведение игрового объекта. В основном компонент Transform определяет положение, поворот и масштаб каждого игрового объекта, а значения представляются в виде координат X, Y и Z для каждого свойства. По умолчанию положение устанавливается в точку (0,0,0), которая также известна как точка начала отсчета, откуда происходят все вычисления координат в сцене.
  • Материал придает объектам текстуру и цвет. В этом приложении мы ограничимся использованием материалов для окраски объектов и не будем вдаваться в другие технические подробности.

Сборка приложения

Шаг 1. Создайте материал, чтобы сделать игровые объекты цветными.

Одна из основных потребностей в дизайне любого приложения — добавление цветов и текстур. Материалы позволяют определять различные эффекты внешнего вида, такие как цвета, шейдеры, текстуры и многое другое. В этом приложении мы ограничимся использованием материалов для добавления цвета.
  1. В окне Project (Проект) в папке Assets (Объекты) создайте новую папку, в которой будут храниться материалы для различных игровых объектов приложения, переименуйте ее в Materials (Материалы) и нажмите два раза, чтобы открыть ее.
  2. В меню выберите Assets (Объекты) > Create (Создать) > Material (Материал) и переименуйте материал в floor-color (цвет пола).
  3. В представлении Inspector (Инспектор) в разделе Main Maps (Основные карты) нажмите поле цвета Albedo, чтобы открыть окно выбора цвета и изменить цвет по своему усмотрению. В этом приложении мы будем использовать значения RGB (3,32,70).
    Unity Inspector showing Albedo color picker set to a dark blue color for the floor material.
  4. Повторите шаги 2–4, чтобы создать материалы для стен, шарика и изменения цвета стен при столкновении. Переименуйте их в wall-color (цвет стен), ball-color (цвет шарика) и after-collision (после столкновения) и установите значения RGB (255,255,255), (240,240,0) и (241,107,8) соответственно.
    Unity Project view with four materials: floor-color, wall-color, ball-color, and after-collision.

Шаг 2. Создайте пол, шарик и четыре стены.

Игровыми объектами этого приложения выступают пол, шарик и четыре стены, а для их создания мы будем использовать плоскость, сферу и кубы из инвентаря Unity.
Пол:
  1. В меню выберите GameObject (Игровой объект) > 3D Object (3D-объект) > Plane (Плоскость).
  2. В дереве дайте этой плоскости имя floor (пол).
  3. В представлении Inspector (Инспектор) в разделе Transform (Трансформация) убедитесь, что в качестве положения установлено начало, т. е. (0,0,0). Если это не так, установите значение (0,0,0).
  4. В разделе Transform (Трансформация) установите масштаб (2,1,2), чтобы увеличить пол. Это плоский объект, он не имеет объема. Поэтому по умолчанию значение Y равно единице.
  5. Перетащите материал floor-color на плоскость, чтобы добавить цвет.
    5. Drag and drop the *floor-color* material on the plane to illustration.
Шарик игрока:
  1. В меню выберите GameObject (Игровой объект) > 3D Object (3D-объект) > Sphere (Сфера).
  2. В дереве присвойте объекту имя player-ball (шарик).
  3. Из папки Materials (Материалы) перетащите ball-color (цвет шарика) на сферу.
  4. В представлении Inspector (Инспектор) в разделе Transform (Трансформация) убедитесь, что задано положение (0,0,0), и установите для Y значение 0,5, чтобы шарик лежал на полу, т. е. (0,0.5,0).
    4. In the **Inspector** view, under **Transform**, ensure th illustration.
Четыре стены:
  1. В меню выберите GameObject (Игровой объект) > 3D Object (3D-объект) > Cube (Куб).
  2. Из папки Materials (Материалы) перетащите wall-color (цвет стены) на куб.
  3. В представлении Inspector (Инспектор) в разделе Transform (Трансформация) установите положение (0,0,0) и масштаб (0.5,2,20.5), чтобы стена аккуратно прилегала к краям пола.
  4. В дереве нажмите куб правой кнопкой мыши и выполните следующие действия:
    а. Переименуйте куб в first-wall (первая стена).
    б. Продублируйте куб три раза, чтобы добавить ещё три стены, и переименуйте их в second-wall (вторая стена), third-wall (третья стена) и fourth-wall (четвертая стена) соответственно.
  5. В дереве выберите third-wall (третья стена) и в представлении Inspector (Инспектор) в разделе Transform (Трансформация) задайте поворот (0,90,0). Повторите этот шаг для fourth-wall (четвертой стены).
  6. В дереве выберите first-wall (первая стена), и в представлении Inspector (Инспектор) в разделе Transform (Трансформация) введите следующие значения, чтобы изменить положение стены таким образом, чтобы она окружала пол со всех сторон. Повторите этот шаг для остальных стен.
    first-wall (первая стена) — (-10,0,0)
    second-wall (вторая стена) — (10,0,0)
    third-wall (третья стена) — (0,0,10)
    fourth-wall (четвертая стена) — (0,0,-10)
    fourth-wall illustration

Шаг 3. Настройте камеру и освещение.

Настройте основную камеру и освещение, чтобы улучшить вид сцены.
  1. В дереве выберите Main Camera (Основная камера).
  2. В представлении Inspector (Инспектор) в разделе Transform (Трансформация) установите положение (0,10,-20) и поворот (20,0,0).
  3. В дереве выберите Directional Light (Направленный свет).
  4. В представлении Inspector (Инспектор) в разделе Transform (Трансформация) установите поворот (50,60,0).

Шаг 4. Добавьте движение шарика.

  1. В представлении Hierarchy (Иерархия) выберите player-ball (шарик).
  2. В представлении Inspector (Инспектор) выполните следующие действия:
    а. Нажмите Add Component (Добавить компонент) > Physics (Физика) > Rigidbody (Жесткое тело).
    Unity Inspector showing the Rigidbody component added to the player-ball GameObject.
    б. Нажмите Add Component (Добавить компонент) > New Script (Новый скрипт), назовите скрипт PlayerController и нажмите Create and Add (Создать и добавить).
    в. Нажмите значок шестеренки рядом со скриптом PlayerController и нажмите Edit Script (Редактировать скрипт), чтобы открыть его в редакторе кода.
    Unity Inspector with the PlayerController script gear menu open and Edit Script highlighted.
    г. Чтобы получать ввод с клавиатуры и добавлять силы для перемещения шарика, замените пример кода следующим:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    // Appears in the Inspector view from where you can set the speed
    public float speed;

    // Rigidbody variable to hold the player ball's rigidbody instance
    private Rigidbody rb;

    // Called before the first frame update
    void Start()
    {
        // Assigns the player ball's rigidbody instance to the variable
        rb = GetComponent<Rigidbody>();
    }

    // Called once per frame
    private void Update()
    {
        // The float variables, moveHorizontal and moveVertical, holds the value of the virtual axes, X and Z.

        // It records input from the keyboard.
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        // Vector3 variable, movement, holds 3D positions of the player ball in form of X, Y, and Z axes in the space.
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        // Adds force to the player ball to move around.
        rb.AddForce(movement * speed * Time.deltaTime);
    }
}
  1. В представлении Inspector (Инспектор) в разделе скрипта PlayerController в поле Speed (Скорость) введите значение скорости. Например, 500. Это та же самая переменная speed (скорость), которую мы объявили в скрипте PlayerController на шаге 4.2.d.
    Unity Inspector showing the PlayerController script with the Speed field set to 500.
  2. Нажмите кнопку Play (Воспроизвести) сверху для предпросмотра приложения. Нажимайте кнопки со стрелками на клавиатуре, чтобы перекатывать шарик.

Шаг 5. Добавьте текст.

  1. В меню выберите Game Object (Игровой объект) > UI (Пользовательский интерфейс) > Text (Текст).
  2. В дереве выберите Text (Текст) и переименуйте его в message (сообщение).
  3. Перейдите с вкладки представления Scene (Сцена) на вкладку представления Game (Игра), чтобы посмотреть, как текст будет показываться игроку.
  4. В представлении Inspector (Инспекторе) в разделе RectTransform измените положение текста. При необходимости можно также изменить цвет и размер шрифта.

Шаг 6. Изменяйте цвет стен и выводите текст, когда шарик входит в столкновение или выходит из него.

Столкновение происходит, когда шарик ударяется о стену. Вы можете добавить эффекты, чтобы выделить столкновение. Например, когда шарик сталкивается со стеной, цвет стены меняется и на экране появляется текст Ой! Затем, когда шарик вновь покатится, цвет стены изменится на исходный и на экране появится текст Катите…
  1. В дереве выберите first-wall (первая стена).
  2. В представлении Inspector (Инспектор) нажмите Add Component (Добавить компонент) > New Script (Новый скрипт), назовите скрипт ColorController и нажмите Create and Add (Создать и добавить).
  3. Нажмите значок шестеренки рядом со скриптом ColorController и выберите Edit Script (Редактировать скрипт), чтобы открыть его в редакторе кода.
  4. Замените пример кода следующим кодом:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    public class ColorController : MonoBehaviour
    {
     public Material[] wallMaterial;
     Renderer rend;
    
     // Appears in the Inspector view from where you can assign the textbox
     public Text displayText;
     // Start is called before the first frame update
     void Start()
     {
         // Assigns the component's renderer instance
         rend = GetComponent<Renderer>();
         rend.enabled = true;
         displayText.text = "";
     }
     // Called when the ball collides with the wall
     private void OnCollisionEnter(Collision col)
     {
         // Checks if the player ball has collided with the wall.
         if (col.gameObject.name == "player-ball")
         {
             displayText.text = "Ouch!";
             rend.sharedMaterial = wallMaterial[0];
         }
     }
     // It is called when the ball moves away from the wall
     private void OnCollisionExit(Collision col)
     {
         if (col.gameObject.name == "player-ball")
         {
             rend.sharedMaterial = wallMaterial[1];
             displayText.text = "Keep Rolling...";
         }
     }
    }
    
  5. В дереве выберите first-wall (первая стена).
  6. В представлении Inspector (Инспектор) в разделе скрипта ColorController выполните следующие действия:
    а. Разверните Wall Material (Материал стен), в поле Size (Размер) введите 2, а в поля Element 0 (Элемент 0) и Element 1 (Элемент 1) перетащите after-collision (после столкновения) и wall-color (цвет стены) соответственно.
    б. Нажмите значок шестеренки рядом с полем Display Text (Показывать текст) и выберите message (сообщение). Display Text (Показывать текст) — это то же самое поле, которое мы объявили в скрипте ColorController.cs на шаге 6.4.
    Unity Inspector showing the ColorController script with Wall Material and Display Text fields.
  7. В дереве выберите second-wall (вторая стена).
  8. В представлении Inspector (Инспектор) нажмите Add Components (Добавить компоненты) > Scripts (Сценарии), выберите в списке ColorController и повторите шаг 6.
  9. Повторите шаги 7 и 8 для остальных стен.
  10. Нажмите кнопку Play (Воспроизвести) сверху для предпросмотра приложения. Нажимайте кнопки со стрелками на клавиатуре, чтобы перекатывать шарик.

Шаг 7. Соберите и запустите приложение.

В зависимости от целевой платформы, которую вы выбрали в настройках сборки, Unity собирает либо .apk-файл для Android, либо .exe-файл для Windows. Поскольку мы не использовали пакет Oculus Integration, приложение может не работать с контроллерами Meta Quest.
  1. Сохраните сцену.
  2. Выберите File (Файл) > Build and Run (Собрать и запустить).
  3. Дважды нажмите файл, чтобы запустить приложение на компьютере. Для ввода используйте клавиатуру или совместимые с Unity джойстики.
Логотип навигации
Русский
© 2026 Meta