Куда прикрепить скрипт
Скрипт можно прикрепить к объекту, сцене, пространству или всему проекту. От выбранного уровня зависит, как долго скрипт работает, и это часто важнее самого кода.
| К чему прикреплён | Работает, пока | Останавливается, когда |
|---|---|---|
| К объекту | объект на экране | объект скрыт, выключен или удалён |
| К сцене | сцена активна | посетитель уходит из сцены |
| К пространству | посетитель находится в пространстве | он переходит в другое пространство |
| К проекту | всегда, в каждом пространстве | посетитель уходит |
На объекте
Это вариант по умолчанию. Подходит для поведения, которое относится к одной вещи: дверь, которая открывается, враг, который преследует, кнопка, которая реагирует.
ctx.entity — это и есть тот объект. Скрипт останавливается сразу вместе с объектом, так что
убирать за объектом, которого больше нет, никогда не придётся.
На сцене
Добавьте скрипт в разделе Скрипты у сцены. Подходит для логики всей сцены: проиграть вступление по порядку, посчитать, сколько предметов осталось собрать, решить, когда посетителю можно идти дальше.
Скрипт запускается, когда сцена становится активной, и останавливается, когда она перестаёт быть активной. В AR-проекте это значит, что он запускается, когда сцена найдена.
На пространстве
Добавьте скрипт в разделе Скрипты у пространства. Скрипт пространства продолжает работать, когда сцена меняется. Подходит для счёта на три сцены, таймера на весь визит или логики, которая выбирает следующую сцену.
Нажатие или другое событие на объекте тоже доходит до скрипта пространства: оно идёт от объекта к сцене, а от сцены к пространству.
На проекте
Добавьте скрипт в Настройках проекта. Скрипт добавляется в каждое пространство, поэтому он есть везде, куда бы ни пошёл посетитель.
Подходит для того, что должно сохраняться при переходе из одного пространства в другое: выборов посетителя, общего прогресса, аналитики.
Что сохраняет значение
| Где хранится | После смены сцены | После смены пространства | После перезагрузки |
|---|---|---|---|
переменная в init | только если скрипт всё ещё работает | только если скрипт всё ещё работает | нет |
ctx.store | да | нет | нет |
| глобальная переменная | да | да | нет |
глобальная переменная @space: | да | нет — у каждого пространства своя, так задумано | нет |
Не сохраняется ничего: ни store, ни глобальные переменные. Если значение понадобится в
следующий раз, отправьте его в своё хранилище, пока посетитель ещё на странице.
Как выбрать уровень
Спросите себя: к какой самой маленькой вещи относится эта логика?
- К одному объекту — прикрепите скрипт к объекту.
- К этой сцене — прикрепите к сцене.
- Ко всему визиту — прикрепите к пространству. Если пространств несколько — к проекту.
Не складывайте всё в проект «на всякий случай». Скрипт проекта не может рассчитывать, что загружена какая-то определённая сцена. Он обрастает проверками, которые скрипту на объекте не нужны.
С патчами всё так же
Патч тоже можно прикрепить к любому из этих уровней, и работает он столько же. Патч на проекте — обычный способ собрать логику для всего проекта без кода.
Дальше: API ctx — всё, что скрипт может делать
через ctx.