Разработка
Разработка
Выберите платформу

Создание первого 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).
  4. Повторите шаги 2–4, чтобы создать материалы для стен, шарика и изменения цвета стен при столкновении. Переименуйте их в wall-color (цвет стен), ball-color (цвет шарика) и after-collision (после столкновения) и установите значения RGB (255,255,255), (240,240,0) и (241,107,8) соответственно.
Шаг 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 на плоскость, чтобы добавить цвет.
Шарик игрока:
  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).
Четыре стены:
  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)
Шаг 3. Настройте камеру и освещение
Настройте основную камеру и освещение, чтобы улучшить вид сцены.
  1. В дереве выберите Main Camera (Основная камера).
  2. В представлении Inspector (Инспектор) в разделе Transform (Трансформация) установите положение (0,10,-20) и поворот (20,0,0).
  3. В дереве выберите Directional Light (Направленный свет).
  4. В представлении Inspector (Инспектор) в разделе Transform (Трансформация) установите поворот (50,60,0).
Шаг 4. Добавьте движение шарика
  1. В дереве выберите player-ball (шарик).
  2. В представлении Inspector (Инспектор) выполните следующие действия:
    а. Нажмите Add Component (Добавить компонент) > Physics (Физика) > Rigidbody (Жесткое тело).
    б. Нажмите Add Component (Добавить компонент) > New Script (Новый скрипт), назовите скрипт PlayerController и нажмите Create and Add (Создать и добавить).
    в. Нажмите значок шестеренки рядом со скриптом PlayerController и нажмите Edit Script (Редактировать скрипт), чтобы открыть его в редакторе кода.
    г. Чтобы получать ввод с клавиатуры и добавлять силы для перемещения шарика, замените пример кода следующим:
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.
  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.
  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