NavigationServer2D
Экспериментальное: This class may be changed or removed in future versions.
Наследует: Object
Серверный интерфейс для низкоуровневого доступа к 2D-навигации.
Описание
NavigationServer2D — это сервер, который обрабатывает навигационные карты, регионы и агентов. Он не обрабатывает навигацию A* из AStar2D или AStarGrid2D.
Карты делятся на регионы, которые состоят из навигационных полигонов. Вместе они определяют проходимую область в 2D-мире.
Примечание: Большинство изменений NavigationServer2D вступают в силу после следующего физического кадра, а не немедленно. Это включает все изменения, внесенные в карты, регионы или агентов узлами, связанными с навигацией, в дереве сцены или выполненные через скрипты.
Чтобы два региона были соединены друг с другом, они должны иметь общее ребро. Ребро считается соединенным с другим, если обе его две вершины находятся на расстоянии меньшем, чем edge_connection_margin до вершины соответствующего другого ребра.
Вы можете назначить навигационные слои областям с помощью region_set_navigation_layers(), которые затем можно проверить при запросе пути с помощью map_get_path(). Это можно использовать для разрешения или запрета определенных областей для некоторых объектов.
Чтобы использовать систему избежания столкновений, вы можете использовать агентов. Вы можете установить целевую скорость агента, затем серверы отправят обратный вызов с измененной скоростью.
Примечание: Система избежания столкновений игнорирует области. Использование измененной скорости напрямую может переместить агента за пределы проходимой области. Это ограничение системы избежания столкновений, любая более сложная ситуация может потребовать использования физического движка.
Этот сервер отслеживает все вызовы и выполняет их во время фазы синхронизации. Это означает, что вы можете запросить любое изменение карты, используя любой поток, не беспокоясь.
Обучающие материалы
Методы
Сигналы
avoidance_debug_changed() 🔗
Выдается при изменении настроек отладки избегания. Доступно только в отладочных сборках.
Выдается при обновлении навигационной карты, при перемещении или изменении региона.
navigation_debug_changed() 🔗
Выдается при изменении настроек отладки навигации. Доступно только в отладочных сборках.
Перечисления
enum ProcessInfo: 🔗
ProcessInfo INFO_ACTIVE_MAPS = 0
Константа для получения количества активных навигационных карт.
ProcessInfo INFO_REGION_COUNT = 1
Константа для получения количества активных навигационных регионов.
ProcessInfo INFO_AGENT_COUNT = 2
Константа для получения количества активных навигационных агентов, обрабатывающих избегание.
ProcessInfo INFO_LINK_COUNT = 3
Константа для получения количества активных навигационных ссылок.
ProcessInfo INFO_POLYGON_COUNT = 4
Константа для получения количества полигонов навигационной сетки.
ProcessInfo INFO_EDGE_COUNT = 5
Константа для получения количества ребер полигона навигационной сетки.
ProcessInfo INFO_EDGE_MERGE_COUNT = 6
Константа для получения количества ребер полигонов навигационной сетки, которые были объединены из-за перекрытия ключей ребер.
ProcessInfo INFO_EDGE_CONNECTION_COUNT = 7
Константа для получения количества ребер полигонов навигационной сетки, которые считаются связанными по близости ребер.
ProcessInfo INFO_EDGE_FREE_COUNT = 8
Константа для получения количества ребер полигонов навигационной сетки, которые не удалось объединить, но которые все еще могут быть соединены близостью ребер или связями.
ProcessInfo INFO_OBSTACLE_COUNT = 9
Константа для получения количества активных навигационных препятствий.
Описания метода
Создает агента.
bool agent_get_avoidance_enabled(agent: RID) const 🔗
Верните true, если указанный agent использует избегание (аннулирование).
int agent_get_avoidance_layers(agent: RID) const 🔗
Возвращает битовую маску avoidance_layers указанного agent.
int agent_get_avoidance_mask(agent: RID) const 🔗
Возвращает битовую маску avoidance_mask указанного agent.
float agent_get_avoidance_priority(agent: RID) const 🔗
Возвращает avoidance_priority указанного agent.
RID agent_get_map(agent: RID) const 🔗
Возвращает RID навигационной карты , которой в данный момент назначен запрошенный agent.
int agent_get_max_neighbors(agent: RID) const 🔗
Возвращает максимальное количество других агентов, которые указанный agent учитывает при навигации.
float agent_get_max_speed(agent: RID) const 🔗
Возвращает максимальную скорость указанного agent.
float agent_get_neighbor_distance(agent: RID) const 🔗
Возвращает максимальное расстояние до других агентов, которое указанный agent учитывает при навигации.
bool agent_get_paused(agent: RID) const 🔗
Возвращает true, если указанный agent приостановлен.
Vector2 agent_get_position(agent: RID) const 🔗
Возвращает позицию указанного agent в мировом пространстве.
float agent_get_radius(agent: RID) const 🔗
Возвращает радиус указанного agent.
float agent_get_time_horizon_agents(agent: RID) const 🔗
Возвращает минимальное количество времени, в течение которого скорости указанного agent, вычисленные при моделировании, безопасны по отношению к другим агентам.
float agent_get_time_horizon_obstacles(agent: RID) const 🔗
Возвращает минимальное количество времени, в течение которого скорости указанного agent, вычисленные при моделировании, безопасны по отношению к статическим препятствиям для избегания.
Vector2 agent_get_velocity(agent: RID) const 🔗
Возвращает скорость указанного agent.
bool agent_has_avoidance_callback(agent: RID) const 🔗
Верните true, если указанный agent имеет обратный вызов для избегания.
bool agent_is_map_changed(agent: RID) const 🔗
Возвращает true, если карта была изменена в предыдущем кадре.
void agent_set_avoidance_callback(agent: RID, callback: Callable) 🔗
Устанавливает обратный вызов Callable, который вызывается после каждого шага обработки избегания для agent. Вычисленный safe_velocity будет отправлен с сигналом объекту непосредственно перед физическими расчетами.
Примечание: Созданные обратные вызовы всегда обрабатываются независимо от состояния SceneTree, пока агент находится на навигационной карте и не освобожден. Чтобы отключить отправку обратного вызова от агента, снова используйте agent_set_avoidance_callback() с пустым Callable.
void agent_set_avoidance_enabled(agent: RID, enabled: bool) 🔗
Если enabled имеет значение true, указанный agent использует избегание.
void agent_set_avoidance_layers(agent: RID, layers: int) 🔗
Установите битовую маску агента avoidance_layers.
void agent_set_avoidance_mask(agent: RID, mask: int) 🔗
Установите битовую маску avoidance_mask агента.
void agent_set_avoidance_priority(agent: RID, priority: float) 🔗
Установите avoidance_priority агента с priority от 0,0 (самый низкий приоритет) до 1,0 (самый высокий приоритет).
Указанный agent не корректирует скорость для других агентов, которые соответствуют avoidance_mask, но имеют более низкий avoidance_priority. Это, в свою очередь, заставляет других агентов с более низким приоритетом корректировать свои скорости еще больше, чтобы избежать столкновения с этим агентом.
void agent_set_map(agent: RID, map: RID) 🔗
Размещает агента на карте.
void agent_set_max_neighbors(agent: RID, count: int) 🔗
Устанавливает максимальное количество других агентов, которые агент учитывает при навигации. Чем больше это число, тем дольше время выполнения симуляции. Если число слишком мало, симуляция не будет безопасной.
void agent_set_max_speed(agent: RID, max_speed: float) 🔗
Устанавливает максимальную скорость агента. Должна быть положительной.
void agent_set_neighbor_distance(agent: RID, distance: float) 🔗
Устанавливает максимальное расстояние до других агентов, которое этот агент учитывает при навигации. Чем больше это число, тем дольше время выполнения симуляции. Если число слишком мало, симуляция не будет безопасной.
void agent_set_paused(agent: RID, paused: bool) 🔗
Если paused равно true, указанный agent не будет обработан. Например, он не будет рассчитывать скорости уклонения или получать обратные вызовы уклонения.
void agent_set_position(agent: RID, position: Vector2) 🔗
Устанавливает положение агента в мировом пространстве.
void agent_set_radius(agent: RID, radius: float) 🔗
Устанавливает радиус действия агента.
void agent_set_time_horizon_agents(agent: RID, time_horizon: float) 🔗
Минимальное количество времени, в течение которого скорости агента, вычисленные симуляцией, безопасны по отношению к другим агентам. Чем больше это число, тем скорее этот агент отреагирует на присутствие других агентов, но тем меньше у него свободы в выборе своих скоростей. Слишком большое значение значительно замедлит движение агентов. Должно быть положительным.
void agent_set_time_horizon_obstacles(agent: RID, time_horizon: float) 🔗
Минимальное количество времени, в течение которого скорости агента, вычисленные симуляцией, безопасны относительно статических препятствий для избегания. Чем больше это число, тем скорее этот агент отреагирует на наличие статических препятствий для избегания, но тем меньше у этого агента свободы в выборе своих скоростей. Слишком большое значение значительно замедлит движение агентов. Должно быть положительным.
void agent_set_velocity(agent: RID, velocity: Vector2) 🔗
Устанавливает velocity как новую желаемую скорость для указанного agent. Моделирование избегания попытается достичь этой скорости, если это возможно, но изменит ее, чтобы избежать столкновения с другими агентами и препятствиями. Когда агент телепортируется в новое положение далеко, используйте agent_set_velocity_forced() вместо этого, чтобы сбросить внутреннее состояние скорости.
void agent_set_velocity_forced(agent: RID, velocity: Vector2) 🔗
Заменяет внутреннюю скорость в моделировании избегания столкновений на velocity для указанного agent. Когда агент телепортируется в новое положение далеко, эта функция должна использоваться в том же кадре. При частом вызове эта функция может привести к застреванию агентов.
void bake_from_source_geometry_data(navigation_polygon: NavigationPolygon, source_geometry_data: NavigationMeshSourceGeometryData2D, callback: Callable = Callable()) 🔗
Запекает предоставленный navigation_polygon с данными из предоставленного source_geometry_data. После завершения процесса будет вызван необязательный callback.
void bake_from_source_geometry_data_async(navigation_polygon: NavigationPolygon, source_geometry_data: NavigationMeshSourceGeometryData2D, callback: Callable = Callable()) 🔗
Запекает предоставленный navigation_polygon с данными из предоставленного source_geometry_data как асинхронную задачу, работающую в фоновом потоке. После завершения процесса будет вызван необязательный callback.
Уничтожает указанный RID.
bool get_debug_enabled() const 🔗
Возвращает true, когда NavigationServer включает отладку.
Возвращает все созданные навигационные карты RID на NavigationServer. Это возвращает как 2D, так и 3D созданные навигационные карты, поскольку между ними нет технического различия.
int get_process_info(process_info: ProcessInfo) const 🔗
Возвращает информацию о текущем состоянии NavigationServer.
bool is_baking_navigation_polygon(navigation_polygon: NavigationPolygon) const 🔗
Возвращает true, когда предоставленный навигационный полигон запекается в фоновом потоке.
Создайте новую связь (Link) между двумя позициями на карте.
bool link_get_enabled(link: RID) const 🔗
Возвращает true, если указанная link включена.
Vector2 link_get_end_position(link: RID) const 🔗
Возвращает конечную позицию link.
float link_get_enter_cost(link: RID) const 🔗
Возвращает входную стоимость этого link.
int link_get_iteration_id(link: RID) const 🔗
Возвращает текущий идентификатор итерации навигационной ссылки. Каждый раз, когда навигационная ссылка изменяется и синхронизируется, идентификатор итерации увеличивается. Идентификатор итерации 0 означает, что навигационная ссылка никогда не синхронизировалась.
Примечание: Идентификатор итерации вернется к 1 после достижения предела диапазона.
RID link_get_map(link: RID) const 🔗
Возвращает навигационную карту RID, которой в данный момент назначена запрошенная link.
int link_get_navigation_layers(link: RID) const 🔗
Возвращает слои навигации для этого link.
int link_get_owner_id(link: RID) const 🔗
Возвращает ObjectID объекта, который управляет этой ссылкой.
Vector2 link_get_start_position(link: RID) const 🔗
Возвращает начальную позицию этого link.
float link_get_travel_cost(link: RID) const 🔗
Возвращает стоимость поездки по этому link.
bool link_is_bidirectional(link: RID) const 🔗
Возвращает, можно ли перемещаться по link в обоих направлениях.
void link_set_bidirectional(link: RID, bidirectional: bool) 🔗
Устанавливает, можно ли перемещаться по этой link в обоих направлениях.
void link_set_enabled(link: RID, enabled: bool) 🔗
Если enabled имеет значение true, указанная link будет добавлена к текущей навигационной карте.
void link_set_end_position(link: RID, position: Vector2) 🔗
Устанавливает позицию выхода для link.
void link_set_enter_cost(link: RID, enter_cost: float) 🔗
Устанавливает enter_cost для этого link.
void link_set_map(link: RID, map: RID) 🔗
Устанавливает навигационную карту RID для ссылки.
void link_set_navigation_layers(link: RID, navigation_layers: int) 🔗
Установить навигационные слои ссылок. Это позволяет выбирать ссылки из запроса пути (при использовании map_get_path()).
void link_set_owner_id(link: RID, owner_id: int) 🔗
Установите ObjectID объекта, который управляет этой ссылкой.
void link_set_start_position(link: RID, position: Vector2) 🔗
Устанавливает позицию входа для этого link.
void link_set_travel_cost(link: RID, travel_cost: float) 🔗
Устанавливает travel_cost для этого link.
Создайте новую карту.
void map_force_update(map: RID) 🔗
Устарело: This method is no longer supported, as it is incompatible with asynchronous updates. It can only be used in a single-threaded context, at your own risk.
Эта функция немедленно принудительно синхронизирует указанную навигационную map RID. По умолчанию навигационные карты синхронизируются только в конце каждого физического кадра. Эту функцию можно использовать для немедленного (пере)расчета всех навигационных сеток и связей регионов навигационной карты. Это позволяет немедленно запросить навигационный путь для измененной карты в том же кадре (несколько раз, если необходимо).
Из-за технических ограничений текущая очередь команд NavigationServer будет очищена. Это означает, что будут выполнены все уже поставленные в очередь команды обновления для этого физического кадра, даже те, которые предназначены для других карт, регионов и агентов, не являющихся частью указанной карты. Дорогостоящие вычисления навигационных сеток и связей регионов карты будут выполнены только для указанной карты. Другие карты получат обычную синхронизацию в конце физического кадра. Если указанная карта получит изменения после принудительного обновления, она также обновится снова, когда другие карты получат свое обновление.
Обработка уклонения и отправка сигналов safe_velocity не затрагивается этой функцией и продолжает происходить для всех карт и агентов в конце физического кадра.
Примечание: С большой силой приходит большая ответственность. Эту функцию должны использовать только пользователи, которые действительно знают, что они делают, и имеют на это вескую причину. Принудительное немедленное обновление навигационной карты требует блокировки NavigationServer и очистки всей очереди команд NavigationServer. Это может не только серьезно повлиять на производительность игры, но и привести к ошибкам, если использовать их ненадлежащим образом без особой дальновидности.
Array[RID] map_get_agents(map: RID) const 🔗
Возвращает все навигационные агенты RID, которые в данный момент назначены запрошенной навигационной карте map.
float map_get_cell_size(map: RID) const 🔗
Возвращает размер ячейки карты, используемый для растеризации вершин навигационной сетки.
Vector2 map_get_closest_point(map: RID, to_point: Vector2) const 🔗
Возвращает точку поверхности навигационной сетки, ближайшую к указанному to_point на навигационной map.
RID map_get_closest_point_owner(map: RID, to_point: Vector2) const 🔗
Возвращает точку поверхности навигационной сетки, ближайшую к указанному to_point на навигационной map.
float map_get_edge_connection_margin(map: RID) const 🔗
Возвращает границу соединения ребер карты. Грань соединения ребер — это расстояние, используемое для соединения двух регионов.
int map_get_iteration_id(map: RID) const 🔗
Возвращает текущий идентификатор итерации навигационной карты. Каждый раз, когда навигационная карта изменяется и синхронизируется, идентификатор итерации увеличивается. Идентификатор итерации 0 означает, что навигационная карта никогда не синхронизировалась.
Примечание: Идентификатор итерации вернется к 1 после достижения предела диапазона.
float map_get_link_connection_radius(map: RID) const 🔗
Возвращает радиус соединения ссылок карты. Это расстояние является максимальным диапазоном, в котором любая ссылка будет искать полигоны навигационной сетки для соединения.
Array[RID] map_get_links(map: RID) const 🔗
Возвращает все навигационные ссылки RID-ов, которые в данный момент назначены запрошенной навигационной карте map.
float map_get_merge_rasterizer_cell_scale(map: RID) const 🔗
Возвращает внутренний масштаб ячеек растеризатора слияния карты.
Array[RID] map_get_obstacles(map: RID) const 🔗
Возвращает все навигационные препятствия RID-ов, которые в данный момент назначены запрошенной навигационной карте map.
PackedVector2Array map_get_path(map: RID, origin: Vector2, destination: Vector2, optimize: bool, navigation_layers: int = 1) 🔗
Возвращает путь навигации для достижения пункта назначения из исходной точки. navigation_layers — это битовая маска всех слоев навигации региона, которым разрешено находиться на пути.
Vector2 map_get_random_point(map: RID, navigation_layers: int, uniformly: bool) const 🔗
Возвращает случайную позицию, выбранную из всех полигонов области карты с соответствующими navigation_layers.
Если uniformly равен true, все области карты, полигоны и грани взвешиваются по площади их поверхности (медленнее).
Если uniformly равен false, выбираются только случайная область и случайный полигон (быстрее).
Array[RID] map_get_regions(map: RID) const 🔗
Возвращает все регионы навигации RID, которые в данный момент назначены запрошенной навигационной карте map.
bool map_get_use_async_iterations(map: RID) const 🔗
Возвращает true, если синхронизация map использует асинхронный процесс, работающий в фоновом потоке.
bool map_get_use_edge_connections(map: RID) const 🔗
Возвращает информацию о том, позволяет ли навигационная map областям навигации использовать граничные соединения для соединения с другими областями навигации в непосредственной близости от границы граничного соединения навигационной карты.
bool map_is_active(map: RID) const 🔗
Возвращает true, если карта активна.
void map_set_active(map: RID, active: bool) 🔗
Делает карту активной.
void map_set_cell_size(map: RID, cell_size: float) 🔗
Устанавливает размер ячейки карты, используемый для растеризации вершин навигационной сетки. Должен совпадать с размером ячейки используемых навигационных сеток.
void map_set_edge_connection_margin(map: RID, margin: float) 🔗
Установите границу соединения краев карты, используемую для склеивания краев совместимых регионов.
void map_set_link_connection_radius(map: RID, radius: float) 🔗
Установите радиус соединения ссылок карты, используемый для соединения ссылок с навигационными полигонами.
void map_set_merge_rasterizer_cell_scale(map: RID, scale: float) 🔗
Установите внутренний масштаб ячеек растеризатора слияния карты, используемый для управления чувствительностью слияния.
void map_set_use_async_iterations(map: RID, enabled: bool) 🔗
Если enabled имеет значение true, то синхронизация map использует асинхронный процесс, который выполняется в фоновом потоке.
void map_set_use_edge_connections(map: RID, enabled: bool) 🔗
Установите использование краевого соединения навигации map. Если enabled равно true, навигационная карта позволяет навигационным регионам использовать краевые соединения для соединения с другими навигационными регионами в непосредственной близости от границы краевого соединения навигационной карты.
Создает новое навигационное препятствие (obstacle).
bool obstacle_get_avoidance_enabled(obstacle: RID) const 🔗
Возвращает true, если для предоставленного obstacle включено уклонение.
int obstacle_get_avoidance_layers(obstacle: RID) const 🔗
Возвращает битовую маску avoidance_layers указанного obstacle.
RID obstacle_get_map(obstacle: RID) const 🔗
Возвращает навигационную карту RID, которой в данный момент назначен запрошенный obstacle.
bool obstacle_get_paused(obstacle: RID) const 🔗
Возвращает true, если указанное obstacle приостановлено.
Vector2 obstacle_get_position(obstacle: RID) const 🔗
Возвращает положение указанного obstacle в мировом пространстве.
float obstacle_get_radius(obstacle: RID) const 🔗
Возвращает радиус указанного динамического obstacle.
Vector2 obstacle_get_velocity(obstacle: RID) const 🔗
Возвращает скорость указанного динамического obstacle.
PackedVector2Array obstacle_get_vertices(obstacle: RID) const 🔗
Возвращает вершины контура для указанного obstacle.
void obstacle_set_avoidance_enabled(obstacle: RID, enabled: bool) 🔗
Если enabled имеет значение true, предоставленный obstacle влияет на избегание с помощью агентов.
void obstacle_set_avoidance_layers(obstacle: RID, layers: int) 🔗
Установите битовую маску avoidance_layers препятствий.
void obstacle_set_map(obstacle: RID, map: RID) 🔗
Устанавливает навигационную карту RID для препятствия.
void obstacle_set_paused(obstacle: RID, paused: bool) 🔗
Если paused равно true, то указанный obstacle не будет обработан. Например, он больше не будет влиять на скорость уклонения.
void obstacle_set_position(obstacle: RID, position: Vector2) 🔗
Устанавливает положение препятствия в мировом пространстве.
void obstacle_set_radius(obstacle: RID, radius: float) 🔗
Устанавливает радиус динамического препятствия.
void obstacle_set_velocity(obstacle: RID, velocity: Vector2) 🔗
Устанавливает velocity для динамического obstacle. Позволяет другим агентам лучше предсказывать движение динамического препятствия. Работает только в сочетании с радиусом препятствия.
void obstacle_set_vertices(obstacle: RID, vertices: PackedVector2Array) 🔗
Устанавливает вершины контура для препятствия. Если вершины закручены по часовой стрелке, агенты будут вталкиваться препятствием, в противном случае они будут выталкиваться.
void parse_source_geometry_data(navigation_polygon: NavigationPolygon, source_geometry_data: NavigationMeshSourceGeometryData2D, root_node: Node, callback: Callable = Callable()) 🔗
Анализирует SceneTree на предмет исходной геометрии в соответствии со свойствами navigation_polygon. Обновляет предоставленный ресурс source_geometry_data полученными данными. Затем ресурс можно использовать для запекания навигационной сетки с помощью bake_from_source_geometry_data(). После завершения процесса будет вызван необязательный callback.
Примечание: Эта функция должна запускаться в основном потоке или с отложенным вызовом, поскольку SceneTree не является потокобезопасным.
Производительность: Несмотря на удобство, чтение массивов данных из ресурсов Mesh может отрицательно повлиять на частоту кадров. Данные должны быть получены от графического процессора, что задерживает RenderingServer в процессе. Для производительности предпочтительнее использовать, например, формы столкновений или создавать массивы данных полностью в коде.
void query_path(parameters: NavigationPathQueryParameters2D, result: NavigationPathQueryResult2D, callback: Callable = Callable()) 🔗
Запрашивает путь в заданной навигационной карте. Начальная и конечная позиция, а также другие параметры определяются через NavigationPathQueryParameters2D. Обновляет предоставленный объект результата NavigationPathQueryResult2D путем среди других результатов, запрошенных запросом. После завершения процесса будет вызван необязательный callback.
Создает новый регион.
Rect2 region_get_bounds(region: RID) const 🔗
Возвращает выровненный по осям прямоугольник для преобразованной навигационной сетки region.
Vector2 region_get_closest_point(region: RID, to_point: Vector2) const 🔗
Возвращает точку поверхности навигационной сетки, ближайшую к указанному to_point в навигационной region.
Vector2 region_get_connection_pathway_end(region: RID, connection: int) const 🔗
Возвращает конечную точку соединения. connection — это индекс между 0 и возвращаемым значением region_get_connections_count().
Vector2 region_get_connection_pathway_start(region: RID, connection: int) const 🔗
Возвращает начальную точку соединения. connection — это индекс между 0 и возвращаемым значением region_get_connections_count().
int region_get_connections_count(region: RID) const 🔗
Возвращает количество связей этого region с другими регионами на карте.
bool region_get_enabled(region: RID) const 🔗
Возвращает true, если указанный region включен.
float region_get_enter_cost(region: RID) const 🔗
Возвращает стоимость входа для этого region.
int region_get_iteration_id(region: RID) const 🔗
Возвращает текущий идентификатор итерации региона навигации. Каждый раз, когда регион навигации изменяется и синхронизируется, идентификатор итерации увеличивается. Идентификатор итерации 0 означает, что регион навигации никогда не синхронизировался.
Примечание: Идентификатор итерации вернется к 1 после достижения предела диапазона.
RID region_get_map(region: RID) const 🔗
Возвращает навигационную карту RID, которой в данный момент назначен запрошенный region.
int region_get_navigation_layers(region: RID) const 🔗
Возвращает навигационные слои региона.
int region_get_owner_id(region: RID) const 🔗
Возвращает ObjectID объекта, который управляет этим регионом.
Vector2 region_get_random_point(region: RID, navigation_layers: int, uniformly: bool) const 🔗
Возвращает случайную позицию, выбранную из всех полигонов региона с соответствующим navigation_layers.
Если uniformly равен true, все полигоны региона и грани взвешиваются по площади их поверхности (медленнее).
Если uniformly равен false, выбираются только случайный полигон и грань (быстрее).
Transform2D region_get_transform(region: RID) const 🔗
Возвращает глобальное преобразование этого region.
float region_get_travel_cost(region: RID) const 🔗
Возвращает стоимость поездки в этом region.
bool region_get_use_async_iterations(region: RID) const 🔗
Возвращает true, если region использует асинхронный процесс синхронизации, работающий в фоновом потоке.
bool region_get_use_edge_connections(region: RID) const 🔗
Возвращает значение, указывающее, настроена ли навигационная область region на использование краевых соединений для соединения с другими навигационными областями в непосредственной близости от границы краевого соединения навигационной карты.
bool region_owns_point(region: RID, point: Vector2) const 🔗
Возвращает true, если предоставленная point в мировом пространстве в настоящее время принадлежит предоставленной навигации region. Владение в этом контексте означает, что одна из граней полигонов сетки навигации региона имеет возможное положение на самом близком расстоянии к этой точке по сравнению со всеми другими сетками навигации из других регионов навигации, которые также зарегистрированы на навигационной карте предоставленного региона.
Если несколько сеток навигации имеют положения на равном расстоянии, то навигационная область, полигоны которой обрабатываются первой, выигрывает право собственности. Полигоны обрабатываются в том же порядке, в котором навигационные области были зарегистрированы на NavigationServer.
Примечание: Если навигационные сетки из разных регионов навигации перекрываются (чего следует избегать в целом), результат может оказаться не таким, как ожидалось.
void region_set_enabled(region: RID, enabled: bool) 🔗
Если enabled имеет значение true, указанный region будет добавлен к текущей навигационной карте.
void region_set_enter_cost(region: RID, enter_cost: float) 🔗
Устанавливает enter_cost для этого region.
void region_set_map(region: RID, map: RID) 🔗
Устанавливает карту региона.
void region_set_navigation_layers(region: RID, navigation_layers: int) 🔗
Установить навигационные слои региона. Это позволяет выбирать регионы из запроса пути (при использовании map_get_path()).
void region_set_navigation_polygon(region: RID, navigation_polygon: NavigationPolygon) 🔗
Устанавливает navigation_polygon для региона.
void region_set_owner_id(region: RID, owner_id: int) 🔗
Установите ObjectID объекта, который управляет этим регионом.
void region_set_transform(region: RID, transform: Transform2D) 🔗
Устанавливает глобальную трансформацию для региона.
void region_set_travel_cost(region: RID, travel_cost: float) 🔗
Устанавливает travel_cost для этого region.
void region_set_use_async_iterations(region: RID, enabled: bool) 🔗
Если enabled равно true, то region использует асинхронный процесс синхронизации, который выполняется в фоновом потоке.
void region_set_use_edge_connections(region: RID, enabled: bool) 🔗
Если enabled имеет значение true, навигационный region будет использовать граничные соединения для соединения с другими навигационными областями в непосредственной близости от границы граничного соединения навигационной карты.
void set_active(active: bool) 🔗
Управляйте активацией этого сервера.
void set_debug_enabled(enabled: bool) 🔗
Если true включает режим отладки на NavigationServer.
PackedVector2Array simplify_path(path: PackedVector2Array, epsilon: float) 🔗
Возвращает упрощенную версию path с удаленными менее критическими точками пути. Величина упрощения указывается в единицах измерения мира и контролируется epsilon. Упрощение использует вариант алгоритма Рамера-Дугласа-Пейкера для прореживания точек кривой.
Упрощение пути может быть полезно для смягчения различных проблем следования пути, которые могут возникнуть с определенными типами агентов и поведением сценария. Например, «рулевые» агенты или избегание в «открытых полях».
RID source_geometry_parser_create() 🔗
Создает новый источник парсера геометрии. Если Callable установлен для парсера с source_geometry_parser_set_callback(), обратный вызов будет вызван для каждого отдельного узла, который анализируется всякий раз, когда используется parse_source_geometry_data().
void source_geometry_parser_set_callback(parser: RID, callback: Callable) 🔗
Устанавливает callback Callable для конкретной исходной геометрии parser. Callable получит вызов со следующими параметрами:
navigation_mesh- Ссылка NavigationPolygon, используемая для определения настроек анализа. НЕ редактируйте и не добавляйте напрямую в навигационную сетку.source_geometry_data- Ссылка NavigationMeshSourceGeometryData2D. Добавьте пользовательскую исходную геометрию для запекания навигационной сетки к этому объекту.node- Node, который анализируется.