Физика
Благодаря физике объекты падают, сталкиваются и отскакивают. Здесь — что считается твёрдым, откуда берутся формы столкновений и как двигать физический объект.
Почти всё работает само. Пол твёрдый без всякой настройки, а динамические объекты падают.
Что считается твёрдым
Объект твёрдый, если вы дали ему твёрдое тело. Ещё он твёрдый, если у него есть форма и он не входит в тело выше по дереву. Поэтому пол вас останавливает просто потому, что это пол. Отмечать его не нужно.
Проверьте объект так:
| У объекта есть… | Результат |
|---|---|
| твёрдое тело | он сам по себе тело |
| твёрдое тело с типом Нет | здесь ничего не твёрдое, включая дочерние объекты |
| коллайдер, даже невидимый | твёрдый |
| геометрия, и объект видим | твёрдый |
| геометрия, но объект скрыт | не твёрдый |
| ничего из этого (группа, свет) | не твёрдый |
Отсюда два полезных правила:
- Коллайдер остаётся твёрдым, даже когда он невидим. Так делается невидимая стена: добавьте коллайдер без геометрии. Посетители в неё упираются, но ничего не видят.
- Геометрия твёрдая, только пока она видна. Скройте декоративную фигуру, и она перестанет преграждать путь.
Если форма уже вошла в более крупное тело, она остаётся в нём, даже когда скрыта. Чтобы убрать её, удалите объект или задайте его твёрдому телу тип Нет.
Формы столкновений
Если у объекта есть коллайдер, физика использует его. Если нет, движок делает форму из геометрии:
| Геометрия | Форма столкновения |
|---|---|
| куб, сфера, цилиндр, капсула, конус | такая же форма |
| три многогранника | точная внешняя форма |
| плоскость, круг, кольцо, треугольник | тонкая пластина, твёрдая с обеих сторон |
| тор | приблизительное кольцо |
| выдавливание, тело вращения | форма, точно повторяющая меш |
| импортированная 3D-модель | никакой — см. ниже |
С физикой это самый частый сюрприз. Бросьте GLB-модель в сцену, сделайте её динамической — и она провалится сквозь мир. Добавьте коллайдер, и всё будет в порядке. Почти всегда подходит куб или капсула.
Форма по мешу (из выдавливания, тела вращения или импортированной геометрии) хорошо подходит для неподвижного пола или стены. На движущемся объекте она проходит сквозь другие предметы и дрожит. Используйте вместо неё куб, сферу, капсулу или цилиндр. Простые формы к тому же гораздо быстрее.
Если масштабировать объект, его форма столкновения масштабируется вместе с ним.
Как двигать физический объект
Где находится динамическое тело, решает физика. На следующем шаге она перезапишет ваше изменение, и будет казаться, что оно не сработало.
- Чтобы толкнуть тело, используйте импульс или силу.
- Чтобы переставить его в другое место, используйте телепорт: для возрождения, контрольных точек или возврата на старт.
В скрипте используйте ctx.physics.teleport(...) и ctx.physics.applyImpulse(...). Подробнее —
в справочнике ctx. Для
персонажа, который ходит, используйте игровое управление.
Оно делает всё это за вас.
Узнать, как быстро движется объект, дёшево, но значение отстаёт примерно на кадр. Его хватает, чтобы проверить, движется ли объект вообще, но для точных расчётов оно не годится.
Настройки мира
Гравитация, трение по умолчанию, упругость и качество расчёта задаются для всего проекта. Для каждого пространства их можно переопределить. Изменения применяются сразу, без перезапуска.
Каждое тело может задать своё трение и упругость. Если их не трогать, тело берёт настройки мира.
Столкновения
Когда два объекта касаются, оба получают событие on-collide и узнают, во что врезались. В
событии можно ограничить столкновения определёнными объектами или оставить любые.
Нажатие передаётся вверх к родительским объектам, а столкновение — нет. Оно срабатывает только у тех объектов, которые действительно коснулись. Вешайте событие на тот объект, который сталкивается.
Где работает физика
- В браузере — да.
- В приложении AR Clip (на телефоне) — да.
- В редакторе — нет. Пока вы работаете, ничего не падает.
Когда проект запущен, физика включается, только если она нужна сцене. Она нужна, если в сцене есть что-то динамическое или кинематическое, игровое управление или тело вместе со скриптом. Сцене только со статическими объектами физика не нужна, поэтому такая сцена открывается быстрее.
Если скрипт создаст мяч посреди сессии, физика запустится в этот момент.
Дальше: Свет — типы света и что плавно меняется при переходах.