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

Физика

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

Что считается твёрдым

Вещь твёрдая, если вы дали ей 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да
Редакторнет — пока вы работаете, ничего не падает

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

Проверка живая, так что мяч, созданный скриптом посреди сессии, поднимет физику для себя сам.


Дальше: Свет — и что анимируется плавно.