Физика
Физика подключается по желанию и работает в основном сама: пол твёрдый без всяких просьб, а то, что вы пометили как динамическое, падает. Правила ниже объясняют те два-три случая, где она ведёт себя не так, как ожидают.
Что считается твёрдым
Вещь твёрдая, если вы дали ей rigid body или если у неё есть форма и ничто сверху её уже не забрало. Пол вас останавливает, потому что он пол, — помнить о пометке не нужно.
Идём вверх от объекта:
| У объекта есть… | Результат |
|---|---|
| rigid body | он сам себе тело |
| rigid body в положении none | здесь ничто не твёрдое, включая детей |
| коллайдер — пусть даже невидимый | твёрдый |
| геометрия, и объект видим | твёрдый |
| геометрия, но объект скрыт | не твёрдый |
| ничего из перечисленного (группа, свет) | не твёрдый |
Отсюда следуют две вещи, и обе полезны:
Коллайдер означает, что вы это имели в виду, поэтому он остаётся твёрдым невидимым. Ровно так и делается невидимая стена: коллайдер без геометрии. Посетители упираются в ничто.
Геометрия твёрдая, только пока её видно. Скройте декоративную форму — она перестанет что-либо преграждать.
Как только форма вошла в более крупное тело, она остаётся в нём, даже будучи скрытой. Чтобы вынуть, удалите объект или поставьте его rigid body в none.
Откуда берутся формы столкновений
Дайте объекту коллайдер — он и будет использоваться. Без него движок выводит форму из геометрии:
| Геометрия | Что получится |
|---|---|
| box, sphere, cylinder, capsule, cone | соответствующая форма |
| три многогранника | точная оболочка |
| plane, circle, ring, triangle | тонкая двусторонняя плита |
| torus | кольцо из перекрывающихся сфер |
| extrude, lathe | точная меш-форма |
| импортированная 3D-модель | ничего — см. ниже |
Это с большим отрывом самый частый сюрприз физики. Бросьте GLB в сцену, пометьте динамическим — и он провалится сквозь мир. Добавьте коллайдер (бокс или капсула почти всегда правильный ответ) — и всё заработает.
Меш-форма (из extrude, lathe или импортированной геометрии) годится для статичного пола или стены. На чём-то движущемся она проходит сквозь предметы и дёргается. Используйте бокс, сферу, капсулу или цилиндр — простые формы к тому же гораздо быстрее.
Масштаб запекается в форму, так что масштабирование объекта масштабирует и то, с чем он сталкивается.
Как двигать физическое тело
Физика владеет тем, где находится динамическое тело, и переписывает вашу правку на следующем шаге. Выглядит так, будто редактор вас игнорирует.
Двигайте импульсом или силой, а ставьте в нужное место телепортом — респауны, чекпоинты, «обратно к началу».
Из скрипта это ctx.physics.teleport(...) и ctx.physics.applyImpulse(...) — см.
справочник ctx. Если нужен ходячий персонаж,
игровые контролы сделают всё это за вас.
Чтение скорости дёшево и отстаёт примерно на кадр — идеально для «я двигаюсь?», но не для точной математики.
Настройки мира
Гравитация, трение по умолчанию, упругость и качество решателя задаются на проект и могут быть переопределены на space. Изменения применяются сразу, без перезапуска.
Отдельное тело может переопределить трение и упругость; не трогайте их — унаследует мировые.
Столкновения
Когда две вещи соприкасаются, сообщают обеим: на каждой срабатывает событие on-collide, и каждая
узнаёт, во что врезалась. В событии это можно сузить до конкретных объектов или оставить открытым.
В отличие от нажатия, оно срабатывает только на объектах, которые реально соприкоснулись. Вешайте событие на то, что сталкивается.
Когда физика вообще работает
| Где | Физика? |
|---|---|
| Плеер (веб) | да |
| Приложение ARClip | да |
| Редактор | нет — пока вы работаете, ничего не падает |
Даже в плеере движок запускает физику только тогда, когда она сцене нужна: есть что-то динамическое или кинематическое, игровые контролы или тело вместе со скриптом. Сцена из статичных декораций за неё не платит — в вебе это экономит вашим посетителям многомегабайтную загрузку.
Проверка живая, так что мяч, созданный скриптом посреди сессии, поднимет физику для себя сам.
Дальше: Свет — и что анимируется плавно.