HoloLens (1-го поколения) и Azure 306: потоковое видео
Примечание.
Руководства Mixed Reality Academy были разработаны для иммерсивных гарнитур HoloLens (1-го поколения) и иммерсивных гарнитур Mixed Reality. Поэтому мы считаем, что важно оставить эти руководства для разработчиков, которые ищут рекомендации по разработке для этих устройств. Данные руководства не будут обновляться с учетом последних наборов инструментов или возможностей взаимодействия для HoloLens 2. Они будут сохранены для работы на поддерживаемых устройствах. В будущем будет появиться новая серия учебников, которые будут размещены в будущем, которые продемонстрировали, как разрабатывать для HoloLens 2. Это уведомление будет обновлено со ссылкой на эти учебники при публикации.
В этом курсе вы узнаете, как подключить Службы мультимедиа Azure к интерфейсу виртуальной реальности Windows Смешанная реальность, чтобы разрешить потоковое воспроизведение видео 360 градусов на иммерсивных гарнитурах.
Службы мультимедиа Azure — это коллекция служб, которые предоставляют широковещательные услуги потоковой передачи видео, чтобы достичь большей аудитории на современных самых популярных мобильных устройствах. Дополнительные сведения см. на странице Службы мультимедиа Azure.
Завершив этот курс, вы получите иммерсивное приложение гарнитуры смешанной реальности, которое сможет сделать следующее:
Получите видео с 360 градусов из служба хранилища Azure через службу мультимедиа Azure.
Отображение полученного видео 360 градусов в сцене Unity.
Переход между двумя сценами с двумя разными видео.
В приложении вы узнаете, как интегрировать результаты с проектом. Этот курс предназначен для обучения интеграции службы Azure с проектом Unity. Это ваша задача использовать знания, полученные от этого курса, чтобы улучшить ваше приложение смешанной реальности.
Поддержка устройств
Курс | HoloLens | Иммерсивные гарнитуры |
---|---|---|
MR и Azure 306: потоковая передача видео | ✔️ |
Предварительные требования
Примечание.
Это руководство предназначено для разработчиков, имеющих базовый опыт работы с Unity и C#. Также помните, что предварительные требования и письменные инструкции в этом документе представляют тестируемые и проверенные на момент написания статьи (май 2018 г.). Вы можете использовать последнее программное обеспечение, как указано в статье об установке инструментов, хотя не следует предполагать, что информация в этом курсе будет идеально соответствовать тому, что вы найдете в новом программном обеспечении, чем указано ниже.
Для этого курса рекомендуется использовать следующее оборудование и программное обеспечение:
- Компьютер разработки, совместимый с Windows Смешанная реальность для разработки иммерсивной гарнитуры (VR)
- Windows 10 Fall Creators Update (или более поздней версии) с включенным режимом разработчика
- Последний пакет SDK для Windows 10
- Unity 2017.4
- Visual Studio 2017
- Гарнитура windows Смешанная реальность иммерсивной (VR)
- Доступ к Интернету для настройки и извлечения данных Azure
- Два 360-градусных видео в формате mp4 (вы можете найти некоторые видео с бесплатной королевской подпиской на этой странице скачивания)
Перед началом работы
Чтобы избежать проблем с сборкой этого проекта, настоятельно рекомендуется создать проект, упомянутый в этом руководстве, в корневой или почти корневой папке (длинные пути к папкам могут вызвать проблемы во время сборки).
Настройте и проверьте Смешанная реальность иммерсивную гарнитуру.
Примечание.
Для этого курса вам не потребуются контроллеры движения. Если вам нужна поддержка настройки иммерсивной гарнитуры, щелкните ссылку на настройку Windows Смешанная реальность.
Глава 1. Портал Azure: создание учетной записи служба хранилища Azure
Чтобы использовать службу служба хранилища Azure, необходимо создать и настроить учетную запись хранения в портал Azure.
Войдите на портал Azure.
Примечание.
Если у вас еще нет учетной записи Azure, необходимо создать ее. Если вы используете это руководство в классе или лаборатории, попросите преподавателя или одного из прокторов, чтобы помочь настроить новую учетную запись.
После входа щелкните учетные записи хранения в меню слева.
На вкладке "Учетные записи хранения" нажмите кнопку "Добавить".
На вкладке "Создание учетной записи хранения" выполните следующие действия.
Вставьте имя учетной записи, учитывайте, что это поле принимает только цифры и строчные буквы.
Для модели развертывания выберите Resource Manager.
Для типа учетной записи выберите хранилище (общего назначения версии 1).
Для повышения производительности выберите "Стандартный".*
Для репликации выберите локально избыточное хранилище (LRS).
Оставьте безопасную передачу необходимой в качестве отключенной.
Выберите подписку.
Выберите группу ресурсов или создайте новую. Группа ресурсов предоставляет способ мониторинга, контроля доступа, подготовки и управления выставлением счетов для коллекции ресурсов Azure.
Определите расположение группы ресурсов (если вы создаете новую группу ресурсов). Расположение в идеале будет находиться в регионе, где будет выполняться приложение. Некоторые ресурсы Azure доступны только в определенных регионах.
Вам потребуется подтвердить, что вы поняли условия, примененные к этой службе.
После нажатия кнопки "Создать" вам придется ждать создания службы, это может занять минуту.
Уведомление появится на портале после создания экземпляра службы.
На этом этапе вам не нужно следовать ресурсу, просто перейдите к следующей главе.
Глава 2. Портал Azure: создание службы мультимедиа
Чтобы использовать службу мультимедиа Azure, необходимо настроить экземпляр службы, который будет доступен приложению (в котором владелец учетной записи должен быть администратором).
На портале Azure щелкните "Создать ресурс " в левом верхнем углу и найдите службу мультимедиа, нажмите клавишу ВВОД. Ресурс, который вы хотите в настоящее время, имеет розовый значок; Щелкните это, чтобы отобразить новую страницу.
Новая страница предоставит описание службы мультимедиа. В нижней левой части этого запроса нажмите кнопку "Создать ", чтобы создать связь с этой службой.
После нажатия кнопки "Создать панель" появится, где необходимо указать некоторые сведения о новой службе мультимедиа:
Вставьте нужное имя учетной записи для этого экземпляра службы.
Выберите подписку.
Выберите группу ресурсов или создайте новую. Группа ресурсов предоставляет способ мониторинга, контроля доступа, подготовки и управления выставлением счетов для коллекции ресурсов Azure. Рекомендуется сохранить все службы Azure, связанные с одним проектом (например, такими, как эти лаборатории), в общей группе ресурсов.
Если вы хотите узнать больше о группах ресурсов Azure, перейдите по этой ссылке, чтобы управлять группами ресурсов Azure.
Определите расположение группы ресурсов (если вы создаете новую группу ресурсов). Расположение в идеале будет находиться в регионе, где будет выполняться приложение. Некоторые ресурсы Azure доступны только в определенных регионах.
В разделе "Учетная запись хранения" щелкните раздел "Выбрать...", а затем щелкните учетную запись хранения, созданную в последней главе.
Вам также потребуется подтвердить, что вы поняли условия, примененные к этой службе.
Нажмите кнопку Создать.
После нажатия кнопки "Создать" вам придется ждать создания службы, это может занять минуту.
Уведомление появится на портале после создания экземпляра службы.
Щелкните уведомление, чтобы изучить новый экземпляр службы.
Нажмите кнопку "Перейти к ресурсу " в уведомлении, чтобы изучить новый экземпляр службы.
На новой странице службы мультимедиа в области слева щелкните ссылку "Активы ", которая находится примерно на полпути.
На следующей странице в левом верхнем углу страницы нажмите кнопку "Отправить".
Щелкните значок папки, чтобы просмотреть файлы и выберите первый 360 видео, который вы хотите потоковой передачи.
Чтобы скачать пример видео, можно перейти по этой ссылке.
Предупреждение
Длинные имена файлов могут вызвать проблему с кодировщиком: чтобы убедиться, что видео не имеют проблем, рекомендуется сократить длину имен видеофайлов.
Индикатор выполнения станет зеленым после завершения отправки видео.
Щелкните приведенный выше текст (имя службы — активы), чтобы вернуться на страницу "Активы".
Вы заметите, что видео успешно отправлено. Щелкните ее.
Страница, которую вы перенаправляете, будет отображать подробные сведения о видео. Чтобы использовать видео, необходимо закодировать его, нажав кнопку "Кодировать " в левом верхнем углу страницы.
Откроется новая панель справа, где вы сможете задать параметры кодирования для файла. Задайте следующие свойства (некоторые уже будут заданы по умолчанию):
Имя кодировщика мультимедиа Media Encoder Standard
Предустановленная кодировка содержимого адаптивно с несколькими скоростью MP4
Обработка Video1.mp4 с именем носителя-кодировщика заданий уровня "Стандартный"
Имя ресурса выходных носителей Video1.mp4 - Кодировщик мультимедиа в кодировке Standard
Нажмите кнопку Создать.
Вы заметите панель с добавленным заданием кодирования, щелкните эту панель, а панель появится с ходом кодирования, отображаемого в нем.
Дождитесь завершения задания. После этого вы можете закрыть панель с помощью X в правом верхнем углу этой панели.
Внимание
Время, необходимое для этого, зависит от размера файла видео. Этот процесс может занять довольно некоторое время.
Теперь, когда была создана закодированная версия видео, его можно опубликовать, чтобы сделать его доступным. Для этого щелкните синюю ссылку "Активы" , чтобы вернуться на страницу ресурсов.
Вы увидите видео вместе с другим, который имеет тип ресурса Multi-Bitrate MP4.
Примечание.
Вы можете заметить, что новый ресурс, наряду с вашим первоначальным видео, является неизвестным, и имеет 0 байт для него размер, просто обновите окно для обновления.
Щелкните этот новый ресурс.
Вы увидите аналогичную панель, которую вы использовали раньше, просто это другой ресурс. Нажмите кнопку "Опубликовать", расположенную в верхнем центре страницы.
Вам будет предложено задать указатель, который является точкой входа, для файла или с в ресурсах. Для сценария задайте следующие свойства:
Тип указателя>прогрессивный.
Дата и время будут заданы для вас с текущей даты до времени в будущем (сто лет в этом случае). Оставьте как есть или измените его на костюм.
Примечание.
Дополнительные сведения о указателях и их выборе см. в документации по Службы мультимедиа Azure.
В нижней части этой панели нажмите кнопку "Добавить ".
Теперь видео опубликовано и может передаваться с помощью конечной точки. Далее вниз страницы находится раздел "Файлы ". Здесь будут находиться разные закодированные версии видео. Выберите максимально возможное разрешение (на рисунке ниже — файл 1920x960), а затем появится панель справа. Там вы найдете URL-адрес скачивания. Скопируйте эту конечную точку , как она будет использоваться позже в коде.
Примечание.
Вы также можете нажать кнопку "Воспроизвести", чтобы воспроизвести видео и проверить его.
Теперь необходимо отправить второе видео, которое будет использоваться в этой лаборатории. Выполните описанные выше действия, повторив тот же процесс для второго видео. Убедитесь, что вы также скопируйте вторую конечную точку . Используйте следующую ссылку, чтобы скачать второе видео.
После публикации обоих видео вы готовы перейти к следующей главе.
Глава 3. Настройка проекта Unity
Ниже приведена стандартная настройка для разработки с помощью Смешанная реальность, а также хороший шаблон для других проектов.
Откройте Unity и нажмите кнопку "Создать".
Теперь необходимо указать имя проекта Unity, вставить MR_360VideoStreaming.. Убедитесь, что для типа проекта задано значение 3D. Задайте расположение в нужном месте (помните, что ближе к корневым каталогам лучше). Затем нажмите кнопку "Создать проект".
При открытии Unity стоит проверить, установлен ли редактор скриптов по умолчанию в Visual Studio. Перейдите к разделу "Изменитьпараметры", а затем в новом окне перейдите к внешним средствам. Измените внешний редактор скриптов на Visual Studio 2017. Закройте окно параметров.
Затем перейдите к параметрам сборки файлови переключите платформу на универсальная платформа Windows, нажав кнопку "Переключить платформу".
Кроме того, убедитесь, что:
Целевое устройство имеет значение Any Device.
Тип сборки имеет значение D3D.
Для пакета SDK установлено значение "Последняя версия".
Версия Visual Studio установлена в качестве последней версии.
Для сборки и запуска задано значение Local Machine.
Не беспокойтесь о настройке сцен прямо сейчас, так как вы настроите их позже.
Остальные параметры должны оставаться по умолчанию.
В окне "Параметры сборки" нажмите кнопку "Параметры проигрывателя", откроется связанная панель в пространстве, где находится инспектор.
На этой панели необходимо проверить несколько параметров:
На вкладке "Другие параметры" :
Версия среды выполнения сценариев должна быть стабильной (эквивалентная .NET 3.5).
Серверная часть скрипта должна быть .NET.
Уровень совместимости API должен быть .NET 4.6.
Далее вниз по панели в параметрах XR (приведенных ниже параметров публикации), установите флажок "Поддерживаемая виртуальная реальность", убедитесь, что пакет SDK для Windows Смешанная реальность добавлен.
На вкладке "Параметры публикации" в разделе "Возможности" проверьте:
InternetClient;
После внесения этих изменений закройте окно параметров сборки .
Сохраните проект сохранения файлапроекта.
Глава 4. Импорт пакета InsideOutSphere Unity
Внимание
Если вы хотите пропустить компонент настройки Unity этого курса и перейти прямо в код, вы можете скачать этот пакет unitypackage, импортировать его в проект в качестве пользовательского пакета, а затем продолжить с главы 5. Вам по-прежнему потребуется создать проект Unity.
Для этого курса необходимо скачать пакет активов Unity с именем InsideOutSphere.unitypackage.
Практическое руководство по импорту пакета unity:
На панели мониторинга Unity перед вами щелкните "Ресурсы" в меню в верхней части экрана, а затем выберите "Импорт пользовательского пакета>".
Используйте средство выбора файлов, чтобы выбрать пакет InsideOutSphere.unitypackage и нажмите кнопку "Открыть". Список компонентов для этого ресурса будет отображаться. Подтвердите импорт, нажав кнопку "Импорт".
После завершения импорта вы заметите, что в папку "Активы" добавлены три новые папки, материалы, модели и префабы. Такая структура папок является типичной для проекта Unity.
Откройте папку Models и увидите, что модель InsideOutSphere была импортирована.
В папке "Материалы" вы найдете материал InsideOutSpheres лямберт1, а также материал с именем Button Material, который используется GazeButton, который вы увидите в ближайшее время.
Папка Prefabs содержит префаб InsideOutSphere, содержащую модель InsideOutSphere и GazeButton.
Код не включен, вы напишете код, следуя этому курсу.
В иерархии выберите объект Main Camera и обновите следующие компоненты:
Преобразование
Позиция = X: 0, Y: 0, Z: 0.
Поворот = X: 0, Y: 0, Z: 0.
Масштаб X: 1, Y: 1, Z: 1.
Камера
Очистить флаги: сплошной цвет.
Вырезки самолетов: вблизи: 0,1, Фар: 6.
Перейдите в папку Prefab, а затем перетащите префаб InsideOutSphere в панель иерархии.
Разверните объект InsideOutSphere в иерархии, щелкнув маленькую стрелку рядом с ним. Под ним появится дочерний объект GazeButton. Это будет использоваться для изменения сцен и таким образом видео.
В окне инспектора щелкните компонент преобразования InsideOutSphere, убедитесь, что заданы следующие свойства:
Преобразование — положение
X | Y | Z |
---|---|---|
0 | 0 | 0 |
Преобразование — поворот
X | Y | Z |
---|---|---|
0 | -50 | 0 |
Преобразование — масштабирование
X | Y | Z |
---|---|---|
0 | 0 | 0 |
- Щелкните дочерний объект GazeButton и задайте его преобразование следующим образом:
Преобразование — положение
X | Y | Z |
---|---|---|
3,6 | 1,3 | 0 |
Преобразование — поворот
X | Y | Z |
---|---|---|
0 | 0 | 0 |
Преобразование — масштабирование
X | Y | Z |
---|---|---|
1 | 1 | 1 |
Глава 5. Создание класса VideoController
Класс VideoController размещает две конечные точки видео, которые будут использоваться для потоковой передачи содержимого из службы мультимедиа Azure.
Чтобы создать этот класс, выполните указанные ниже действия.
Щелкните правой кнопкой мыши папку ресурса, расположенную на панели проекта , и нажмите кнопку "Создать > папку". Назовите скрипты папок.
Дважды щелкните папку "Скрипты" , чтобы открыть ее.
Щелкните правой кнопкой мыши в папке и нажмите кнопку "Создать > скрипт C#". Назовите скрипт VideoController.
Дважды щелкните новый скрипт VideoController , чтобы открыть его с помощью Visual Studio 2017.
Обновите пространства имен в верхней части файла кода следующим образом:
using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.Video;
Введите следующие переменные в классе VideoController , а также метод Awake( ):
/// <summary> /// Provides Singleton-like behaviour to this class. /// </summary> public static VideoController instance; /// <summary> /// Reference to the Camera VideoPlayer Component. /// </summary> private VideoPlayer videoPlayer; /// <summary> /// Reference to the Camera AudioSource Component. /// </summary> private AudioSource audioSource; /// <summary> /// Reference to the texture used to project the video streaming /// </summary> private RenderTexture videoStreamRenderTexture; /// <summary> /// Insert here the first video endpoint /// </summary> private string video1endpoint = "-- Insert video 1 Endpoint here --"; /// <summary> /// Insert here the second video endpoint /// </summary> private string video2endpoint = "-- Insert video 2 Endpoint here --"; /// <summary> /// Reference to the Inside-Out Sphere. /// </summary> public GameObject sphere; void Awake() { instance = this; }
Теперь пришло время ввести конечные точки из видео службы мультимедиа Azure:
Первая в переменную video1endpoint .
Второй в переменной video2endpoint .
Предупреждение
Существует известная проблема с использованием https в Unity с версией 2017.4.1f1. Если видео содержат ошибку при воспроизведении, попробуйте использовать http.
Затем необходимо изменить метод Start(). Этот метод будет запускаться каждый раз, когда пользователь переключает сцену (следовательно переключение видео), глядя на кнопку "Взгляд".
// Use this for initialization void Start() { Application.runInBackground = true; StartCoroutine(PlayVideo()); }
После метода Start() вставьте метод IEnumerator PlayVideo() iEnumerator, который будет использоваться для запуска видео без проблем (поэтому заглушку не видно).
private IEnumerator PlayVideo() { // create a new render texture to display the video videoStreamRenderTexture = new RenderTexture(2160, 1440, 32, RenderTextureFormat.ARGB32); videoStreamRenderTexture.Create(); // assign the render texture to the object material Material sphereMaterial = sphere.GetComponent<Renderer>().sharedMaterial; //create a VideoPlayer component videoPlayer = gameObject.AddComponent<VideoPlayer>(); // Set the video to loop. videoPlayer.isLooping = true; // Set the VideoPlayer component to play the video from the texture videoPlayer.renderMode = VideoRenderMode.RenderTexture; videoPlayer.targetTexture = videoStreamRenderTexture; // Add AudioSource audioSource = gameObject.AddComponent<AudioSource>(); // Pause Audio play on Awake audioSource.playOnAwake = true; audioSource.Pause(); // Set Audio Output to AudioSource videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource; videoPlayer.source = VideoSource.Url; // Assign the Audio from Video to AudioSource to be played videoPlayer.EnableAudioTrack(0, true); videoPlayer.SetTargetAudioSource(0, audioSource); // Assign the video Url depending on the current scene switch (SceneManager.GetActiveScene().name) { case "VideoScene1": videoPlayer.url = video1endpoint; break; case "VideoScene2": videoPlayer.url = video2endpoint; break; default: break; } //Set video To Play then prepare Audio to prevent Buffering videoPlayer.Prepare(); while (!videoPlayer.isPrepared) { yield return null; } sphereMaterial.mainTexture = videoStreamRenderTexture; //Play Video videoPlayer.Play(); //Play Sound audioSource.Play(); while (videoPlayer.isPlaying) { yield return null; } }
Последний метод, который требуется для этого класса, — это метод ChangeScene(), который будет использоваться для переключения между сценами.
public void ChangeScene() { SceneManager.LoadScene(SceneManager.GetActiveScene().name == "VideoScene1" ? "VideoScene2" : "VideoScene1"); }
Совет
Метод ChangeScene() использует удобный компонент C#, называемый условным оператором. Это позволяет проверять условия, а затем возвращать значения на основе результата проверки, все в рамках одной инструкции. Чтобы узнать больше об условном операторе, перейдите по этой ссылке.
Сохраните изменения в Visual Studio перед возвращением в Unity.
Вернитесь в редактор Unity, щелкните и перетащите класс VideoController [from]{.подчеркивание} папку Scripts в объект Main Camera на панели иерархии .
Щелкните главную камеру и просмотрите панель инспектора. Вы заметите, что в недавно добавленном компоненте скрипта есть поле с пустым значением. Это эталонное поле, которое предназначено для общедоступных переменных в коде.
Перетащите объект InsideOutSphere из панели иерархии в слот Sphere, как показано на рисунке ниже.
Глава 6. Создание класса Gaze
Этот класс отвечает за создание Raycast , который будет проецирован с основной камеры, чтобы определить, какой объект смотрит пользователь. В этом случае raycast потребуется определить, смотрит ли пользователь на объект GazeButton в сцене и активирует поведение.
Чтобы создать этот класс, выполните указанные ниже действия.
Перейдите в папку "Скрипты", созданную ранее.
Щелкните правой кнопкой мыши панель проекта и создайтескрипт C#. Назовите скрипт Gaze.
Дважды щелкните новый скрипт Gaze , чтобы открыть его с помощью Visual Studio 2017.
Убедитесь, что в верхней части скрипта находится следующее пространство имен и удалите все остальные:
using UnityEngine;
Затем добавьте следующие переменные в класс Gaze :
/// <summary> /// Provides Singleton-like behaviour to this class. /// </summary> public static Gaze instance; /// <summary> /// Provides a reference to the object the user is currently looking at. /// </summary> public GameObject FocusedGameObject { get; private set; } /// <summary> /// Provides a reference to compare whether the user is still looking at /// the same object (and has not looked away). /// </summary> private GameObject oldFocusedObject = null; /// <summary> /// Max Ray Distance /// </summary> float gazeMaxDistance = 300; /// <summary> /// Provides whether an object has been successfully hit by the raycast. /// </summary> public bool Hit { get; private set; }
Теперь необходимо добавить код для методов Awake() и Start( ).
private void Awake() { // Set this class to behave similar to singleton instance = this; } void Start() { FocusedGameObject = null; }
Добавьте следующий код в метод Update() для проекта Raycast и обнаружения целевого попадания:
void Update() { // Set the old focused gameobject. oldFocusedObject = FocusedGameObject; RaycastHit hitInfo; // Initialise Raycasting. Hit = Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hitInfo, gazeMaxDistance); // Check whether raycast has hit. if (Hit == true) { // Check whether the hit has a collider. if (hitInfo.collider != null) { // Set the focused object with what the user just looked at. FocusedGameObject = hitInfo.collider.gameObject; } else { // Object looked on is not valid, set focused gameobject to null. FocusedGameObject = null; } } else { // No object looked upon, set focused gameobject to null. FocusedGameObject = null; } // Check whether the previous focused object is this same // object (so to stop spamming of function). if (FocusedGameObject != oldFocusedObject) { // Compare whether the new Focused Object has the desired tag we set previously. if (FocusedGameObject.CompareTag("GazeButton")) { FocusedGameObject.SetActive(false); VideoController.instance.ChangeScene(); } } }
Сохраните изменения в Visual Studio перед возвращением в Unity.
Щелкните и перетащите класс Gaze из папки "Скрипты" в объект Main Camera на панели иерархии .
Глава 7. Настройка двух сцен Unity
Цель этой главы заключается в настройке двух сцен, каждый из которых размещает видео для потоковой передачи. Вы будете дублировать уже созданную сцену, чтобы вам не нужно было снова настроить ее, хотя затем измените новую сцену, чтобы объект GazeButton находится в другом расположении и имеет другой внешний вид. Здесь показано, как измениться между сценами.
Для этого перейдите к сцене сохранения файлов > как.... Откроется окно сохранения. Нажмите кнопку "Создать папку ".
Назовите папку "Сцены".
Окно "Сохранить сцену " по-прежнему будет открыто. Откройте только что созданную папку "Сцены ".
В поле "Файл": текстовое поле введите VideoScene1, а затем нажмите кнопку "Сохранить".
Вернитесь в Unity, откройте папку "Сцены " и щелкните файл VideoScene1 слева. Используйте клавиатуру и нажмите клавиши CTRL + D , вы будете дублировать эту сцену
Совет
Команда "Дубликат" также может выполняться путем перехода к элементу "Изменить > дубликат".
Unity автоматически добавит номер имен сцен, но проверьте его в любом случае, чтобы убедиться, что он соответствует ранее вставленным кодом.
У вас должны быть VideoScene1 и VideoScene2.
В двух сценах перейдите к параметрам сборки файлов>. Открыв окно "Параметры сборки", перетащите сцены в раздел "Сцены" в разделе "Сборка".
Совет
Вы можете выбрать оба сцены из папки "Сцены ", удерживая кнопку CTRL , а затем слева щелкнуть каждую сцену и, наконец, перетащить оба.
Закройте окно "Параметры сборки" и дважды щелкните VideoScene2.
Открыв вторую сцену, щелкните дочерний объект GazeButton в InsideOutSphere и задайте его преобразование следующим образом:
Преобразование — положение
X | Y | Z |
---|---|---|
0 | 1,3 | 3,6 |
Преобразование — поворот
X | Y | Z |
---|---|---|
0 | 0 | 0 |
Преобразование — масштабирование
X | Y | Z |
---|---|---|
1 | 1 | 1 |
При выборе дочернего элемента GazeButton просмотрите инспектор и фильтр сетки. Щелкните маленький целевой объект рядом с полем ссылки на сетку:
Появится всплывающее окно выбора сетки . Дважды щелкните сетку куба из списка ресурсов.
Фильтр сетки будет обновляться и теперь будет кубом. Теперь щелкните значок Шестеренки рядом с Коллидером Sphere и нажмите кнопку "Удалить компонент", чтобы удалить коллидер из этого объекта.
При выборе GazeButton нажмите кнопку "Добавить компонент" в нижней части инспектора. В поле поиска введите поле и Box Collider будет параметром . Щелкните это, чтобы добавить коллайдер Box в объект GazeButton.
GazeButton теперь частично обновляется, чтобы выглядеть иначе, однако теперь вы создадите новый материал, чтобы он выглядел совершенно иначе, и проще распознать как другой объект, чем объект в первой сцене.
Перейдите в папку "Материалы " на панели проекта. Дублируйте материал Button Material (нажмите клавиши CTRL + D на клавиатуре или щелкните материал слева, а затем в меню "Изменить файл" выберите "Дублировать").
Выберите новый материал Button Material (здесь с именем Button Material 1) и в инспекторе щелкните окно цвета Albedo. Появится всплывающее окно, где можно выбрать другой цвет (выбрать нужный), а затем закрыть всплывающее окно. Материал будет собственным экземпляром и отличается от исходного.
Перетащите новый материал на дочерний элемент GazeButton , чтобы теперь полностью обновить его внешний вид, чтобы легко различаться от первой кнопки сцен.
На этом этапе можно протестировать проект в редакторе перед созданием проекта UWP.
Нажмите кнопку "Воспроизвести" в редакторе и носите гарнитуру.
Просмотрите два объекта GazeButton , чтобы переключаться между первым и вторым видео.
Глава 8. Создание решения UWP
Убедившись, что редактор не имеет ошибок, вы готовы к сборке.
Чтобы создать:
Сохраните текущую сцену, нажав кнопку "Сохранить файл>".
Установите флажок "Проекты Unity C#" (это важно, так как это позволит изменять классы после завершения сборки).
Перейдите к параметрам сборки файлов>, нажмите кнопку "Сборка".
Вам будет предложено выбрать папку, в которой вы хотите создать решение.
Создайте папку BUILDS и в ней создайте другую папку с соответствующим именем.
Щелкните новую папку и нажмите кнопку "Выбрать папку", чтобы выбрать ее, чтобы начать сборку в этом расположении.
После завершения сборки Unity (может потребоваться некоторое время), откроется окно проводник в расположении сборки.
Глава 9. Развертывание на локальном компьютере
После завершения сборки окно проводник появится в расположении сборки. Откройте папку, которую вы назвали и создали, а затем дважды щелкните файл решения (.sln) в этой папке, чтобы открыть решение с помощью Visual Studio 2017.
Единственное, что осталось сделать, — развернуть приложение на компьютере (или локальном компьютере).
Чтобы развернуть на локальном компьютере, выполните приведенные действия.
В Visual Studio 2017 откройте только что созданный файл решения.
На платформе решения выберите x86, Локальный компьютер.
В разделе "Конфигурация решения" выберите "Отладка".
Теперь вам потребуется восстановить все пакеты в решении. Щелкните правой кнопкой мыши решение и щелкните " Восстановить пакеты NuGet" для решения...
Примечание.
Это делается из-за того, что пакеты, созданные Unity, должны быть ориентированы на работу со ссылками на локальные компьютеры.
Перейдите в меню "Сборка" и щелкните "Развернуть решение ", чтобы загрузить неопубликованное приложение на компьютер. Visual Studio сначала будет создавать и развертывать приложение.
Теперь приложение должно отображаться в списке установленных приложений, готовых к запуску.
При запуске приложения Смешанная реальность вы будете находиться в модели InsideOutSphere, используемой в приложении. Эта сфера будет, где видео будет передаваться, предоставляя 360-градусное представление входящего видео (который был снят для такого рода перспективы). Не удивляйтесь, если видео занимает несколько секунд для загрузки, ваше приложение зависит от вашей доступной скорости Интернета, так как видео необходимо получить, а затем скачать, так что для потоковой передачи в приложение. Когда вы будете готовы, измените сцены и откройте свое второе видео, глядя на красную сферу! Затем вы можете вернуться, используя синий куб во второй сцене!
Готовое приложение Службы мультимедиа Azure
Поздравляем, вы создали приложение смешанной реальности, которое использует Службу мультимедиа Azure для потоковой передачи видео 360.
Бонусные упражнения
Упражнение 1
В этом руководстве можно использовать только одну сцену для изменения видео. Экспериментируйте с приложением и сделайте его одним сценой! Возможно, даже добавить еще одно видео в смесь.
Упражнение 2
Поэкспериментируйте с Azure и Unity и попытайтесь реализовать возможность автоматического выбора видео с другим размером файла в зависимости от силы подключения к Интернету.