Очень часто может потребоваться создание какого-либо интерфейса для прямого взаимодействия с пользователем. Обычно, в игровых движках, таких как Unity, Unreal Engine и так далее, интерфейс создается в пару кнопок.
Раньше же, интерфейс создавали другим способом — создавали текстурированную плоскость (UI) и выносили её куда-то вдаль. Далее, создавали еще одну камеру, которая проецировала этот интерфейс уже на экран пользователя.
К сожалению, данный способ не может быть воссоздан в продвинутом редакторе. Про ограничения о работе с камерами было описано в статье Работа с камерой.
На данный момент, единственным способом добавления UI, является работа с HTML-кодом страницы. Но этот вариант не будет являться правильным, так как это может плохо сказаться на работе сцены в дополненной реальности.
Рабочий способ
В данном случае я создам 2D-кнопку для воспроизведения анимации 3D-модели. Вы можете посмотреть результат, отсканировав QR-код ниже.
Для создания интерфейса первым делом необходимо создать пустой проект.
Далее необходимо добавить 3D-объект, нажав на кнопку File → Import.
Этот объект должен содержать как минимум одну анимацию.
Теперь выберите объект Scene в дереве объектов справа.
Чтобы создать сценарий, нажмите на кнопку NEW.
Далее необходимо перейти в редактор кода, нажав на кнопку Edit.
Теперь можно приступить непосредственно к написанию кода.
Первое, что нужно сделать, это создать функцию для создания интерфейса, назвав ее makeUI().
function makeUI() {
}
После этого необходимо создать новый HTML-элемент <div>, который будет являться контейнером (строки 2-5).
let container;
function makeUI() {
container = document.createElement('div');
container.id = 'container';
container.style.display = 'none';
document.body.appendChild(container);
}
Чтобы избежать создания нового элемента <div> при каждом запуске сцены, следует добавить проверку существования контейнера с помощью if (строки 2-3).
let container;
function makeUI() {
container = document.getElementById('container');
if (!container) {
container = document.createElement('div');
container.id = 'container';
container.style.display = 'none';
document.body.appendChild(container);
}
}
Далее необходимо добавить элемент <img> внутри контейнера, который будет 2D-интерфейсом (строки 10-14).
Далее нам нужно добавить стили к этим элементам, чтобы изображение находилось точно в нижней части экрана. Для этого я создам объект styles вне этой функции (строки 2-17). После этого я привяжу стили к контейнеру и изображению (строки 25 и 32).
Далее необходимо создать три функции: init, start и stop. Это три функции js, которые выполняются при инициализации сцены (init), запуске сцены (start) и остановке сцены (stop).
Теперь необходимо сделать так, чтобы интерфейс скрывался и появлялся. Для этого измените свойство контейнера container.style.display(строки 42 и 46) в функциях start (появляться) и stop (скрываться).
Теперь необходимо создать событие щелчка для добавленного интерфейса. Событие создается с помощью чистого JavaScript. Для этого создайте функцию clickFunction(строки 37-40), которая будет запускаться при нажатии на изображение. Также в функцию запуска нужно добавить слушателя события (строка 48).
Последний шаг - работа с анимацией. Подробнее о работе с анимацией в PRO EDITOR вы можете прочитать в статьеРабота с анимациями 3D-объектов. В данном случае был добавлен один анимационный ролик (строки 37-46). Сама анимация должна быть запущена внутри функции события clickFunction(строка 49).
Сцена готова. Теперь нужно экспортировать сцену в MyWebAR, нажав File → Publish.
Вернитесь в стандартный редактор, нажмите на тип объекта Json MAE на левой панели и загрузите файл .json, который вы экспортировали из продвинутого редактора.
На сцене появится 3D-объект. Сам интерфейс будет виден только в предварительном просмотре или в дополненной реальности.