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

Куда прикрепить скрипт

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

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

На объекте​

Это вариант по умолчанию. Подходит для поведения, которое относится к одной вещи: дверь, которая открывается, враг, который преследует, кнопка, которая реагирует.

ctx.entity — это и есть тот объект. Скрипт останавливается сразу вместе с объектом, так что убирать за объектом, которого больше нет, никогда не придётся.

На сцене​

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

Скрипт запускается, когда сцена становится активной, и останавливается, когда она перестаёт быть активной. В AR-проекте это значит, что он запускается, когда сцена найдена.

На пространстве​

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

Нажатие или другое событие на объекте тоже доходит до скрипта пространства: оно идёт от объекта к сцене, а от сцены к пространству.

На проекте​

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

Подходит для того, что должно сохраняться при переходе из одного пространства в другое: выборов посетителя, общего прогресса, аналитики.

Что сохраняет значение​

Где хранитсяПосле смены сценыПосле смены пространстваПосле перезагрузки
переменная в initтолько если скрипт всё ещё работаеттолько если скрипт всё ещё работаетнет
ctx.storeданетнет
глобальная переменнаядаданет
глобальная переменная @space:данет — у каждого пространства своя, так задуманонет
Если закрыть вкладку, всё сотрётся

Не сохраняется ничего: ни store, ни глобальные переменные. Если значение понадобится в следующий раз, отправьте его в своё хранилище, пока посетитель ещё на странице.

Как выбрать уровень​

Спросите себя: к какой самой маленькой вещи относится эта логика?

  • К одному объекту — прикрепите скрипт к объекту.
  • К этой сцене — прикрепите к сцене.
  • Ко всему визиту — прикрепите к пространству. Если пространств несколько — к проекту.

Не складывайте всё в проект «на всякий случай». Скрипт проекта не может рассчитывать, что загружена какая-то определённая сцена. Он обрастает проверками, которые скрипту на объекте не нужны.

С патчами всё так же​

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


Дальше: API ctx — всё, что скрипт может делать через ctx.