Объекты и сцены
Всё в проекте состоит из объектов, а сцены решают, когда эти объекты появляются. Здесь — как связаны объекты, компоненты и сцены.
В редакторе это объект. В движке и в API скриптов — сущность (entity). В документации слово сущность встречается только там, где речь о коде.
Из чего состоит объект
В объекте есть два вида содержимого:
- Компоненты — это его настройки. Они определяют, что это за объект: как он называется, где стоит, как выглядит, на что реагирует. Компонентов одного вида у объекта может быть только один.
- Дочерние объекты — другие объекты, вложенные в него. У каждого из них свои компоненты.
Вот лампа с четырьмя компонентами:
Объект "Лампа"
├── Meta имя, включён ли, видим ли
├── Transform где стоит, как повёрнут, какого размера
├── Model какую 3D-модель рисовать
└── Events на что реагирует
Это имена из движка. Meta инспектор показывает как Основное.
А вот та же лампа с лампочкой внутри. Лампочка — отдельный объект со своими компонентами:
Объект "Лампа"
└── Объект "Лампочка" ← отдельный объект
├── Transform ← со своими компонентами
└── Light
Так выглядит настоящая сцена. Компоненты перечислены после имени, дочерние объекты сдвинуты под родителем:
Объект "Гостиная" ◆ Anchor ← это сцена: у неё есть якорь
│
├── Объект "Лампа" ◆ Transform ◆ Model ◆ Events
│ └── Объект "Лампочка" ◆ Transform ◆ Light
│
└── Объект "Стол" ◆ Transform ◆ Model ◆ RigidBody ◆ Collider
Всё на этой схеме — объекты. Сценой, лампой или физическим телом их делают компоненты.
Компонент — для свойства самого объекта. Дочерний объект — для отдельной вещи, которая должна двигаться вместе с ним.
Если сдвинуть лампу, сдвинется и лампочка: она внутри лампы. А если убрать у лампы компонент модели, лампочка не исчезнет.
Объекты собираются из компонентов
Списка типов объектов, из которого нужно выбирать, нет. Нужное вы собираете из компонентов:
| Дайте объекту… | …и получите |
|---|---|
| геометрию и материал | видимую фигуру |
| ссылку на модель | импортированную 3D-модель |
| компонент света | источник света |
| текстовый компонент | надпись |
| твёрдое тело и коллайдер | предмет, который двигает физика |
| якорь | сцену |
| скрипт или патч | объект с поведением |
Например, так делается прыгающий мяч:
- Добавьте геометрию сферы и материал. Мяч стало видно.
- Добавьте твёрдое тело и коллайдер. Мяч падает и отскакивает.
- Добавьте скрипт. Теперь мяч может что-то сделать, когда приземлится.
Каждый компонент добавляет одну возможность. Уберёте компонент — пропадёт и она.
Сцены, объекты и логика пространства
Вам встретятся три вида объектов. Они ощущаются по-разному, но это всё объекты, просто с разными компонентами:
| Что это | Что есть | Чего нет |
|---|---|---|
| Сцена | якорь и дочерние объекты | трансформации |
| Обычный объект | трансформация и всё, что ему нужно | якоря |
| Поведение всего пространства | скрипт или патч, и нет родителя | трансформации и якоря |
У сцены нет трансформации, потому что её положение задаёт то, к чему она привязана в реальном мире. У поведения всего пространства её нет, потому что оно нигде не стоит. Это просто логика, которая продолжает работать.
Нужны три материала на одной модели? Используйте слоты внутри её компонента материала. Нужны два компонента чего-то другого? Используйте дочерние объекты. Лампа с двумя лампочками — это объект-лампа с двумя дочерними объектами.
У каждого объекта есть имя, чтобы его можно было найти. Ещё у него может быть родитель — объект, внутри которого он лежит.
Включён и видим
В инспекторе эти два переключателя похожи, но делают разное.
- Выключенный объект убирается из проекта. Он не рисуется, на него нельзя нажать, его скрипты останавливаются, а события не срабатывают. Как будто его нет.
- Невидимый объект только перестаёт рисоваться и реагировать на нажатия. Он остаётся на месте: его скрипты работают, и если у него есть коллайдер, физика с ним сталкивается (см. что считается твёрдым).
Например:
- Невидимая стена, которая всё равно не пускает игрока, — сделайте её невидимой.
- Приз, который появится позже, — держите его выключенным, пока он не понадобится.
Родители и дочерние объекты
Объекты складываются в дерево. Когда вы двигаете родителя, дочерние объекты едут вместе с ним и сохраняют своё положение относительно него. Так собирается всё, что состоит из частей: кузов с четырьмя колёсами внутри едет как одна машина.
Вместе с ним удалятся дочерние объекты и их дочерние объекты. Если что-то нужно сохранить, сначала вытащите это наружу.
Объект нельзя положить внутрь того, что уже лежит внутри него. Редактор этого не позволит.
Сцена — вершина своего дерева. Каждый объект, который вы добавляете в сцену, лежит внутри объекта сцены — напрямую или внутри другого объекта. Любой другой объект без родителя не относится ни к одной сцене. Он принадлежит всему пространству, как описано ниже в разделе Логика для всего пространства.
Сцены и якоря
Сцена — это объект с якорем. Якорь решает, когда сцена появится:
| Якорь | Сцена появляется, когда… |
|---|---|
image | камера узнаёт напечатанную картинку |
qr | посетитель сканирует QR-код |
geo | посетитель оказывается в нужном месте |
face | камера находит лицо |
surface | посетитель ставит её на пол, стену, потолок или стол |
panorama | открывается окружение 360° |
3d | сразу: это обычная 3D-сцена без AR |
VPS размещает контент по отсканированной карте реального места. Это не отдельный вид якоря. Настройте сцену с якорем Поверхность, а потом включите VPS.
Несколько сцен на одном маркере
Сцены с одним и тем же триггером (одна картинка, один QR-код или одно место) образуют группу. Из группы одновременно показывается только одна сцена.
Так можно рассказывать историю. Один и тот же постер сначала открывает первую главу, а потом вторую. Вы только переключаете, какая сцена в группе активна.
Чтобы показывать и скрывать сцену, редактор сам добавляет два события: on-detect показывает её,
а on-lost скрывает. Это обычные события, и их можно менять. Например, можно оставить контент на
экране, когда маркер ушёл из кадра. Посетителям так обычно удобнее: иначе контент пропадает, как
только дрогнет рука.
Настройки сцены на поверхности
У сцен с якорем Поверхность три отдельные настройки. Их легко перепутать:
- Какие поверхности подходят: пол, стена, потолок, стол.
- Как ставится контент: сам на найденную поверхность или туда, куда нажал посетитель.
- Какой движок трекинга использовать: это важно только в браузере. В нативных приложениях эта настройка ни на что не влияет.
Логика для всего пространства
Объект с поведением и без родителя не относится ни к одной сцене. Он относится ко всему пространству. Он продолжает работать, пока сцены сменяют друг друга, и слышит все события в пространстве.
Используйте его для счётчика очков, общего контроллера или чтобы запомнить, что выбрал посетитель. Скрипт внутри сцены останавливается сразу, как только останавливается сцена.
Как редактор подписывает объекты
Редактор показывает подписи вроде модель, примитив или текст. Подпись он выбирает по компонентам объекта и проверяет их в таком порядке:
ссылка на сплат → сплат
модель + скиннинг → анимированная модель
модель → статичная модель
видео → видео ← проверяется раньше геометрии
текст → текст
аудио → аудио
свет → свет
геометрия → примитив
всё остальное → объект
Поэтому плоскость, на которой играет видео, подписана видео, а не примитив. Материал и геометрию можно менять только у примитивов и статичных моделей.
Дальше: Компоненты — чем управляет каждый компонент.