Перейти к основному содержимому

Загрузка

Выберите, чего будут ждать посетители, когда открывают проект, и настройте экран запуска.

Посетители ждут только один раз — в самом начале. От того, что вы загружаете в этот момент, больше всего зависит, насколько быстро открывается проект.

Как приходят ассеты​

Ассет приходит одним из трёх способов:

  • Заранее: скачивается до открытия сцены. Экран запуска ждёт его. Подходит для всего, что видно в первые секунды.
  • Позже: сцена открывается без него, а ассет появляется, когда придёт. Подходит для контента, который нужен дальше по ходу проекта.
  • Потоком: играет прямо из сети и никогда не скачивается целиком. Подходит для видео и аудио.
Потоком могут идти только видео и аудио

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

Настройка проекта и настройка ассета​

Переключатель Предзагрузка проекта в настройках проекта задаёт поведение по умолчанию для всех ассетов. Каждый ассет может его переопределить. В разделе Ассеты проекта наведите курсор на файл: в его строке появятся две кнопки.

  • Загружать заранее: сцена всегда ждёт этот файл, что бы ни было задано в проекте.
  • Загружать на лету: сцена никогда его не ждёт. Видео и аудио идут потоком, остальные файлы загружаются позже.
  • Если ни одна кнопка не включена, файл следует настройке Предзагрузка проекта.

Чтобы выключить кнопку, нажмите её ещё раз. Пока одна из кнопок включена, они остаются видны в строке.

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

Задавайте это на файле

Настройка загрузки принадлежит ассету, а не объектам, которые его используют. Поэтому два объекта с одним файлом всегда загружают его одинаково.

Хорошая схема для начала​

Для большинства проектов:

  1. Загружайте заранее модели и текстуры первой сцены и шрифты, которые видны сразу.
  2. Загружайте позже всё, что относится к следующим сценам.
  3. Пускайте потоком все видео и аудио. Так уже сделано по умолчанию.

Посетители один раз недолго ждут, а дальше проект больше ни разу не останавливается на загрузку.

Экран запуска​

Прежде чем появится сцена, посетители могут увидеть два экрана:

  • экран, на который нужно нажать, чтобы начать;
  • экран, который заполняется, пока приходят ассеты.

Оба настраиваются в настройках проекта: фон, логотип, кнопка запуска и её текст, подсказки онбординга и вид индикатора загрузки.

Если в проекте есть звук, оставьте кнопку запуска

Браузеры не воспроизводят звук, пока посетитель не взаимодействовал со страницей. С разрешениями для AR так же: они выдаются только внутри того нажатия, которое их запросило. Без кнопки первый звук не заиграет, а запрос доступа к камере может так и не появиться.

Свой экран запуска​

Встроенный экран запуска — это предустановка. Чтобы сделать свой, напишите скрипт экрана запуска. Он управляет обоими экранами. Ещё он описывает собственную панель настроек, так что те, кто им пользуется, заполняют поля, а не правят код.

init((ctx: PreloadContext) => {
// Описываем панель настроек. Это выполняется до того, как что-то нарисовано: только описывайте, ничего не рисуйте.
ctx.on('describe', (p) => {
p.section('look', { en: 'Look' });
p.color('tint', { label: { en: 'Background' }, default: '#101014', section: 'look' });
p.text('caption', { label: { en: 'Caption' }, default: '', localized: true, section: 'look' });
p.boolean('hideWhenReady', { label: { en: 'Hide when ready' }, default: true });
});

ctx.on('launch', () => {
/* показать экран, на который нажимают, чтобы начать */
});

ctx.on('loading', () => {
/* показать экран, который заполняется */
});

ctx.on('progress', ({ loaded, total, percent }) => {
/* обновить свою полосу загрузки */
});

ctx.on('ready', () => {
/* всё пришло */
});
});
СобытиеКогда срабатывает
describeстроится панель настроек — и в рантайме, и в редакторе
startрантайм запускается
launchпора показать экран, на который нажимает посетитель
loadingпора показать экран, который заполняется
progressприходят ассеты: loaded, total, percent
readyвсё нужное пришло
errorчто-то пошло не так

Настройки можно локализовать, так что один скрипт экрана запуска работает на всех языках, которые поддерживает проект.

Запускайте сцену внутри нажатия

То, что запускает сцену, нужно вызывать прямо из обработчика нажатия на кнопку. Разрешения на ориентацию устройства и камеру выдаются только внутри того нажатия, которое их запросило. Если запустить сцену на следующем кадре, они потеряются.

Сломанный скрипт экрана запуска не закроет вход посетителям

Если скрипт экрана запуска выдаст ошибку, вместо него покажется встроенный экран.

Что не нужно загружать​

  • Сцене без физики не приходится её ждать.
  • Копии и частицы почти не увеличивают объём загрузки, сколько бы их ни было.

Посетители никогда не ждут того, что им не нужно. Подробнее — на странице Почему AR Clip.


Дальше: Общие пакеты — пакеты кода, которые можно импортировать.