6 / 17–3 часа спринт

Цель эксперимента 2:

Однопользовательский предварительный просмотр альбома с динамическими сценами

  • Отображение нескольких кнопок альбома
  • On-Gaze ​​Изменить выбранную рамку альбома, среду альбома и дорожку

Эксперимент 2 отправлен:

Предварительный просмотр альбома однопользовательских полу-статических сцен: https://musicworldtest1.neocities.org/

который…

  • Загружает предустановленное окружение с популярным компонентом a-environment.
  • Воспроизводит один трек The Ride by Anonymuz с собственным звуковым компонентом a-sound.
  • Отображает несколько обложек альбомов, охватывающих дискографию Anonymuz, в качестве материальной оболочки для оригинального a-box.
  • Вкл. - Нажмите "Изменить среду и дорожку альбома" - "Выбранный альбом не изменится" *

Резюме:

Экспериментальный спринт номер два находится в стадии реализации с более четким акцентом на гораздо более управляемую область - продолжение попытки исходного спринта создать иммерсивную дискографию исполнителей из нескольких альбомов.

Что ж, у нас есть один альбом ... так что давайте сначала займемся этой проблемой, просто жестко закодировав два дополнительных компонента ‹a-box› по той же оси X, что и компонент нашего первого альбома. Нам нужно будет повторить предыдущие шаги, которые мы предприняли для подготовки ресурсов, в основном загрузив изображения в Imgur и создав соответствующие теги ‹img› в нашем контейнере ‹assets›.

С точки зрения дизайна, особенно в таком новом интерфейсе, как смешанная реальность, очень важно постоянно давать пользователям обратную связь, чтобы они могли сопоставить действия с выходными данными. Например, поскольку мы знаем порядок альбомов и соответствующие им обложки / треки, мы сразу узнаем, какой альбом воспроизводится. Для пользователей это не сразу пользователи - какое из трех полей перед ними соответствует контексту, в котором они сейчас находятся?

Ответ, к которому мы пришли, - предоставить выбранному компоненту альбома немного больший масштаб площади поверхности (большая глубина / высота / ширина) по сравнению с аналогами.

Теперь, когда перед нами аккуратно выставлены три альбома, менее чем за 30 минут, пора заняться самым интересным ...

Определение и обработка состояния

Наша сцена A-Frame имеет по умолчанию состояние «Выбранный альбом» (большее поле), связанную среду альбома и связанную дорожку альбома. Теперь, когда у нас есть три разные кнопки альбома, у нас есть три различных возможных состояния . Каждое из этих трех состояний - это просто изменение, которое мы / пользователь ожидаем увидеть в нашей сцене при нажатии одной из трех кнопок. Напомним, что нам нужно учитывать общее состояние, которое состоит из следующих трех свойств:

  • Альбом выбран - через увеличенный компонент ‹a-box›
  • Воспроизведение трека - через собственный компонент A-Frame ‹a-sound›
  • Album Environment - через общедоступный компонент A-Frame Environment.

Один из основных разработчиков A-Frame и пионеров WebVR, Кевин Нго, как обычно, очень пригодится при принятии решения о том, как подойти к стоящей перед нами государственной проблеме. Он выпустил компонент A-Frame State, который было довольно легко установить; мы импортировали следующие две строки в наш тег ‹Head› ‹/Head› и запустили пустой файл State.js, в котором будет храниться состояние нашей сцены:

<script src=”https://unpkg.com/aframe-state-component@^3.0.0/dist/aframe-state-component.min.js"></script><script src=”state.js”></script>

Мы перешли к нашему файлу state.js, чтобы определить наше состояние с помощью трех внутренних свойств, которые мы позже привяжем к нашей общей сцене. Краткое знакомство с React / Redux оказалось здесь весьма кстати, поскольку создание состояния и связанных с ним диспетчеров было несложным. Вскоре у нас были три свойства и три диспетчера действий, аккуратно обобщенные менее чем в 25 строк кода.

Мы вернулись к нашему файлу index.html, чтобы связать наше состояние с соответствующими компонентами - это делается путем добавления ключевого слова «bind__» к атрибуту компонентов. Например, звуковая составляющая:

<a-sound bind__src=”value: selectedAlbumTrack” autoplay=”true” position=”0 2 5"></a-sound>

Мы быстро подключили (связали) нашу среду и масштабировали коробку альбома до состояния по умолчанию, задержали дыхание и нажали кнопку «Обновить»… бинго! Ничего не сломалось. Визуально наша сцена A-Frame выглядит так же, но за кулисами (извините) мы добились довольно большого прогресса, поскольку сцена по умолчанию больше не жестко запрограммирована, а динамически загружается через наше глобальное состояние, определенное в state.js. Все, что осталось сейчас, - это создать курсор для нашего пользователя и написать обработчик событий для нашего компонента альбома ‹a-box›, чтобы изменять наше состояние, когда пользователь смотрит на альбом. Однако мы движемся довольно быстро, в этом спринте осталось чуть меньше часа.

Изменение выбранного альбома On-Gaze

Взгляд-курсор, который использует собственный компонент A-Frame ‹a-cursor›, был прост в реализации. Теперь остается только прикрепить к нашим альбомам слушателей событий, которые будут выдавать изменения в наше состояние. Достаточно просто.

И все же именно здесь мы, наконец, столкнулись с множеством проблем, из-за которых мы просто не достигли поставленной цели.

Во-первых, краткий отказ от ответственности, документация A-Frame, оглядываясь назад, безусловно, действительно дает пример для прослушивателей событий; однако не сразу очевидно, что этот пример работает с простым изменением переданного параметра. В течение добрых 15 минут + я просматривал документацию в поисках ответа на способ по умолчанию создать кнопку из существующего компонента без четкого ответа. Учитывая богатство документации A-Frame, я был удивлен отсутствием информации о такой ключевой пользовательской функции.

К счастью, ветка GitHub содержала суть, которая более подробно объясняла, как обработка событий работает для компонентов. Достаточно просто создать новый компонент и внутри функции init: lifecycle просто использовать this.el. addEventListener (‘click’, function (evt) { наша логика здесь }). Мы назвали наш компонент курсором-слушателем и написали довольно простой оператор If-Then, основанный на HTML-идентификаторе щелчка ‹a-box›, который испускает три изменения состояния, необходимые для смены сцены альбома. А теперь момент истины, осталось менее 30 минут… чтобы проверить это!

Это сработало! По крайней мере, на первый взгляд это работает хорошо… со второго взгляда становится ясно, что у нас несколько ошибок, с которыми мы столкнемся в следующем спринте. Во-первых, масштаб выбранного альбома, как ни странно, не изменился при нажатии на второй, средний альбом (самый левый альбом остается самым большим). Во-вторых, наша отложенная реакция на то, что взгляд не отображается автоматически - это, вероятно, не очевидно из приведенного выше GIF, но мы нажимаем здесь, а не смотрим.

Переходим к Практике 3 по WebVR!

Используемые новые общедоступные компоненты и технологии: