For the complete documentation index, see llms.txt. This page is also available as Markdown.

Навмеш и столкновения

Навмеши определяют проходимое пространство для поиска пути и ограничений перемещения.

Навмеши определяют проходимые области в вашем мире. Используйте их для:

  • Привязки появляющихся объектов к достижимой земле

  • Ограничения игроков/NPC проходимыми регионами

Коллайдеры также можно использовать для вырезания навмешей в редакторе.

Компоненты (краткий обзор)

  • Навмеш: запечённая навигационная сетка, которую вы запрашиваете и перестраиваете

  • Navmesh_Loop: петли полигонов, определяющие границы проходимости (и отверстия)

  • Коллайдеры: Box_Collider, Circle_Collider, Edge_Collider, Polygon_Collider

Для движения/поиска пути (Movement_Agent) см. Агенты движения/NPC.

Справочник API навмеша

Navmesh :: class : Component {
    // Спроецировать точку на этот навмеш.
    // triangle_hint — это подсказка для ускорения, которую можно переиспользовать для близких запросов.
    try_find_closest_point_on_navmesh :: method(
        to_point: v2,
        result: ref v2,
        triangle_hint: ref s64
    ) -> bool;

    // Пропустить луч через навмеш. Возвращает конечную точку и сообщает, успешен ли запрос.
    try_raycast :: method(position: v2, direction: v2) -> v2, bool;

    // Поставить перестроение в очередь для обычного обновления навмеша.
    mark_for_rebuild :: method();

    // Перестроить сейчас, когда запрос в том же кадре требует новую геометрию.
    rebuild_immediately :: method() -> bool;

    // Включать только коллайдеры на этой сущности и её потомках.
    child_colliders_only: bool;

    // Обнаруживать изменения ввода и перестраивать автоматически.
    enable_automatic_rebuilds: bool;
}

Настройка в редакторе (создание навмеша)

  1. Создайте сущность и добавьте Навмеш компонент.

  2. Создайте дочерние сущности с Navmesh_Loop компонентами, чтобы определить проходимые полигоны.

  3. Для каждого Navmesh_Loop:

    • Добавьте точки, чтобы задать форму петли

    • Расположите точки внешней границы против часовой стрелки

    • Переключите Поменять внутри и снаружи чтобы сделать отверстие/препятствие вместо проходимого пространства

  4. Используйте отладочные параметры навмеша в инспекторе, чтобы визуализировать треугольники.

По умолчанию, Navmesh_Loop определяет проходимую область. Переключите это в "пробить отверстия" (непроходимые островки) в существующем навмешe.

Коллайдеры и петли навмеша

Коллайдеры также могут вносить петли через параметры инспектора коллайдера (например, "Make Navmesh Loop" / "Flip Navmesh Loop").

Важные оговорки:

  • С Включить автоматическое перестроение, навмеши обнаруживают изменения петель, коллайдеров, тайлмапа и дочерних навмешей и ставят перестроение в очередь.

  • Включите Только дочерние коллайдеры чтобы игнорировать неродственные коллайдеры в других местах сцены.

  • Если автоматическое перестроение отключено, вызывайте mark_for_rebuild() после изменения входных данных.

  • Вызывайте rebuild_immediately() только перед запросом в том же кадре, которому требуется изменённая геометрия.

Появление на навмешe (ограничить до достижимой земли)

Используйте try_find_closest_point_on_navmesh чтобы спроецировать желаемую позицию на ближайшую допустимую точку на навмешe:

Переиспользуйте triangle_hint для повторяющихся запросов в одной и той же области (спавнеры добычи, волновые спавны и т. д.). Это может значительно ускорить проекцию.

Немедленное перестроение навмешей

Большинство изменений геометрии подхватываются автоматически. Используйте это только когда нужно принудительно задать момент:

  • rebuild_immediately(): перестраивает сейчас (используйте только если вам обязательно нужен обновлённый меш в том же кадре)

Родительские навмеши обновляются после дочерних, поэтому сшитые родительские меши автоматически подхватывают изменения входных данных дочерних мешей.

Рейкаст через навмеш

try_raycast идёт по направлению к границе навмеша. Второй результат сообщает, успешен ли запрос.

Триггеры коллайдера

Коллайдер с is_trigger == true может сообщать, когда другой коллайдер входит, остаётся внутри или выходит. Колбэки триггера работают на неподвижных и движущихся коллайдерах; Movement_Agent не требуется.

Проверки близости и пользовательская логика попаданий

Для зон триггера, которые используют запросы по радиусу вместо колбэков коллайдера, подбора предметов, проверок снарядов или другой пользовательской логики попаданий, используйте:

  • Scene.get_all_components_in_range / Scene.get_closest_component_in_range

  • Простые проверки расстояния (in_range) чтобы определить «внутри», «подобрано», «попадание» и т. д.

Помощники запросов сцены

Наносите урон, подбирайте предметы и начисляйте очки по обычному общему игровому пути. Не защищайте предсказанный геймплей с помощью Game.is_server().

Объём триггера (вход / пребывание / выход)

Чтобы имитировать зону триггера, храните список тех, кто был внутри в прошлом кадре, и сравнивайте его с результатами текущего кадра.

Подбор предметов (ближайший в радиусе)

Быстрые «попадания» при движении (простое подшагивание)

Если вы двигаетесь быстро (рывок, снаряд), можно промахнуться по узким целям, проверяя только конечную позицию. Простое решение — подшагивание: семплировать несколько точек между прошлой и новой позицией и выполнять те же запросы по радиусу.

Последнее обновление