Боковой контакт и завершение раунда
Area3D проверяет актуальное пересечение на полу, включая приземление рядом с уже обнаруженным противником.
Область попадания
У игрока есть MobDetector с Mask 4, Monitoring и формой из настроек префаба. Она обнаруживает тела противников на слое 3. Капсула игрока и область выполняют разные задачи: первая участвует в физическом движении, вторая задаёт игровую зону бокового попадания.
В полном контроллере после обработки успешного попадания сверху выполняется правило: если игрок на полу, пересечение с живым SquashMob вызывает TakeHit().
Почему проверяется список пересечений
Одного BodyEntered недостаточно для этого правила. Игрок может войти в область в воздухе, когда поражения ещё нет, а затем приземлиться сбоку, оставаясь внутри неё. Второе событие входа при этом не обязано возникнуть. Поэтому контроллер читает GetOverlappingBodies() в физическом обновлении и проверяет текущее состояние.
Список областей обновляется на шаге физики, не сразу после присваивания Position. В только что созданном или перемещённом объекте нельзя ожидать немедленно готовый список. В этом примере допускается задержка обнаружения до последующего физического обновления.
Одно поражение
TakeHit() сначала выключает Active и обнуляет скорость, затем отправляет Hit. Повторные пересечения не отправят его ещё раз. EndRun() останавливает таймер и противников, а HUD показывает кнопку повторного запуска.
Объекты с IsQueuedForDeletion() игнорируются. Это нужно после StartRun(): старые противники ещё могут присутствовать в кэшированном списке пересечений до фактического удаления.
Ожидаемые случаи
| Ситуация | Результат |
|---|---|
| Падение на верх куба с подходящей нормалью | Очко и отскок |
| Близкое боковое касание на полу | Завершение раунда |
| Боковое пересечение в воздухе | Пока не поражение |
| Приземление сбоку внутри той же области | Поражение после обновления физики |
| Пересечение со старым удаляемым кубом | Игнорируется |
Если попадание не срабатывает, проверьте Mask 4 у области, Layer 4 числом у противника, обе формы и Monitoring. Не меняйте параметры мониторинга или физическую форму непосредственно внутри события физического пересечения; такие изменения могут требовать отложенного вызова.