NavigationServer3D
Экспериментальное: This class may be changed or removed in future versions.
Наследует: Object
Серверный интерфейс для низкоуровневого доступа к 3D-навигации.
Описание
NavigationServer3D — это сервер, который обрабатывает навигационные карты, регионы и агентов. Он не обрабатывает навигацию A* из AStar3D.
Карты делятся на регионы, которые состоят из навигационных сеток. Вместе они определяют навигационные области в трехмерном мире.
Примечание: Большинство изменений NavigationServer3D вступают в силу после следующего физического кадра, а не немедленно. Это включает все изменения, внесенные в карты, регионы или агентов узлами, связанными с навигацией, в дереве сцены или выполненные через скрипты.
Чтобы два региона были соединены друг с другом, они должны иметь общее ребро. Ребро считается соединенным с другим, если обе его две вершины находятся на расстоянии меньшем, чем 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.
float agent_get_height(agent: RID) const 🔗
Возвращает height (высоту) указанного 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 приостановлен.
Vector3 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, вычисленные при моделировании, безопасны по отношению к статическим препятствиям для избегания.
bool agent_get_use_3d_avoidance(agent: RID) const 🔗
Возвращает true, если предоставленный agent использует избегание в трехмерном пространстве Vector3(x,y,z) вместо горизонтального 2D Vector2(x,y) / Vector3(x,0.0,z).
Vector3 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_height(agent: RID, height: float) 🔗
Обновляет предоставленный agent height.
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: Vector3) 🔗
Устанавливает положение агента в мировом пространстве.
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_use_3d_avoidance(agent: RID, enabled: bool) 🔗
Устанавливает, использует ли агент 2D-избегание или 3D-избегание, когда включено избегание.
Если true, агент вычисляет скорости избегания в 3D для оси xyz, например, для игр, которые происходят в воздухе, под водой или в космосе. 3D-использующий агент избегает только других 3D-использующих агентов. 3D-использующий агент реагирует только на препятствия избегания на основе радиуса. 3D-использующий агент игнорирует любые препятствия на основе вершин. 3D-использующий агент избегает только других 3D-использующих агентов.
Если false, агент вычисляет скорости избегания в 2D вдоль оси xz, игнорируя ось y. 2D-использующий агент избегает только других 2D-использующих агентов. 2D-использующий агент реагирует на препятствия избегания на основе радиуса. Агент 2D using реагирует на препятствия, основанные на вершинах. Агент 2D using избегает только других агентов 2D using. Агенты 2D using будут игнорировать других агентов 2D using или препятствия, которые находятся ниже их текущего положения или выше их текущего положения, включая высоту агентов в 2D Avoidance.
void agent_set_velocity(agent: RID, velocity: Vector3) 🔗
Устанавливает velocity как новую желаемую скорость для указанного agent. Симуляция избегания попытается достичь этой скорости, если это возможно, но изменит ее, чтобы избежать столкновения с другими агентами и препятствиями. Когда агент телепортируется в новое положение, используйте также agent_set_velocity_forced(), чтобы сбросить внутреннюю скорость симуляции.
void agent_set_velocity_forced(agent: RID, velocity: Vector3) 🔗
Заменяет внутреннюю скорость в моделировании избегания столкновений на velocity для указанного agent. Когда агент телепортируется в новое положение, эта функция должна использоваться в том же кадре. При частом вызове эта функция может привести к застреванию агентов.
void bake_from_source_geometry_data(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, callback: Callable = Callable()) 🔗
Запекает предоставленный navigation_mesh с данными из предоставленного source_geometry_data. После завершения процесса будет вызван необязательный callback.
void bake_from_source_geometry_data_async(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, callback: Callable = Callable()) 🔗
Запекает предоставленный navigation_mesh с данными из предоставленного 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_mesh(navigation_mesh: NavigationMesh) const 🔗
Возвращает true, когда предоставленная навигационная сетка запекается в фоновом потоке.
Создайте новую связь (Link) между двумя позициями на карте.
bool link_get_enabled(link: RID) const 🔗
Возвращает true, если указанная link включена.
Vector3 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 объекта, который управляет этой ссылкой.
Vector3 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: Vector3) 🔗
Устанавливает позицию выхода для 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: Vector3) 🔗
Устанавливает позицию входа для этого 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_height(map: RID) const 🔗
Возвращает высоту ячейки карты, используемую для растеризации вершин навигационной сетки по оси Y.
float map_get_cell_size(map: RID) const 🔗
Возвращает размер ячейки карты, используемый для растеризации вершин навигационной сетки на плоскости XZ.
Vector3 map_get_closest_point(map: RID, to_point: Vector3) const 🔗
Возвращает точку поверхности навигационной сетки, ближайшую к указанному to_point на навигационной map.
Vector3 map_get_closest_point_normal(map: RID, to_point: Vector3) const 🔗
Возвращает нормаль поверхности навигационной сетки, ближайшую к указанному to_point на навигационной map.
RID map_get_closest_point_owner(map: RID, to_point: Vector3) const 🔗
Возвращает точку поверхности навигационной сетки, ближайшую к указанному to_point на навигационной map.
Vector3 map_get_closest_point_to_segment(map: RID, start: Vector3, end: Vector3, use_collision: bool = false) const 🔗
Возвращает точку поверхности сетки навигации, ближайшую к предоставленным сегментам start и end на карте навигации map.
Если use_collision равно true, проверка ближайшей точки выполняется только тогда, когда сегмент пересекается с поверхностью сетки навигации.
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.
PackedVector3Array map_get_path(map: RID, origin: Vector3, destination: Vector3, optimize: bool, navigation_layers: int = 1) 🔗
Возвращает путь навигации для достижения пункта назначения из исходной точки. navigation_layers — это битовая маска всех слоев навигации региона, которым разрешено находиться на пути.
Vector3 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.
Vector3 map_get_up(map: RID) const 🔗
Возвращает направление вверх карты.
bool map_get_use_async_iterations(map: RID) const 🔗
Возвращает true, если синхронизация map использует асинхронный процесс, работающий в фоновом потоке.
bool map_get_use_edge_connections(map: RID) const 🔗
Возвращает true, если навигационная map позволяет навигационным регионам использовать граничные соединения для соединения с другими навигационными регионами в непосредственной близости от границы граничного соединения навигационной карты.
bool map_is_active(map: RID) const 🔗
Возвращает true, если карта активна.
void map_set_active(map: RID, active: bool) 🔗
Делает карту активной.
void map_set_cell_height(map: RID, cell_height: float) 🔗
Задает высоту ячейки карты, используемую для растеризации вершин навигационной сетки по оси Y. Должна совпадать с высотой ячейки используемых навигационных сеток.
void map_set_cell_size(map: RID, cell_size: float) 🔗
Устанавливает размер ячейки карты, используемый для растеризации вершин навигационной сетки на плоскости XZ. Должен совпадать с размером ячейки используемых навигационных сеток.
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_up(map: RID, up: Vector3) 🔗
Устанавливает направление карты вверх.
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.
float obstacle_get_height(obstacle: RID) const 🔗
Возвращает height указанного obstacle.
RID obstacle_get_map(obstacle: RID) const 🔗
Возвращает навигационную карту RID, которой в данный момент назначен запрошенный obstacle.
bool obstacle_get_paused(obstacle: RID) const 🔗
Возвращает true, если указанное obstacle приостановлено.
Vector3 obstacle_get_position(obstacle: RID) const 🔗
Возвращает положение указанного obstacle в мировом пространстве.
float obstacle_get_radius(obstacle: RID) const 🔗
Возвращает радиус указанного динамического obstacle.
bool obstacle_get_use_3d_avoidance(obstacle: RID) const 🔗
Возвращает true, если указанный obstacle использует избегание в трехмерном пространстве Vector3(x,y,z) вместо горизонтального 2D Vector2(x,y) / Vector3(x,0.0,z).
Vector3 obstacle_get_velocity(obstacle: RID) const 🔗
Возвращает скорость указанного динамического obstacle.
PackedVector3Array 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_height(obstacle: RID, height: float) 🔗
Устанавливает height для obstacle. В 3D агенты будут игнорировать препятствия, которые находятся выше или ниже них, используя 2D-избегание.
void obstacle_set_map(obstacle: RID, map: RID) 🔗
Назначает obstacle навигационной карте.
void obstacle_set_paused(obstacle: RID, paused: bool) 🔗
Если paused равно true, то указанный obstacle не будет обработан. Например, он больше не будет влиять на скорость уклонения.
void obstacle_set_position(obstacle: RID, position: Vector3) 🔗
Обновляет position в мировом пространстве для obstacle.
void obstacle_set_radius(obstacle: RID, radius: float) 🔗
Устанавливает радиус динамического препятствия.
void obstacle_set_use_3d_avoidance(obstacle: RID, enabled: bool) 🔗
Устанавливает, использует ли obstacle 2D-обход или 3D-обход, если включен режим обхода.
void obstacle_set_velocity(obstacle: RID, velocity: Vector3) 🔗
Устанавливает velocity для динамического obstacle. Позволяет другим агентам лучше предсказывать движение динамического препятствия. Работает только в сочетании с радиусом препятствия.
void obstacle_set_vertices(obstacle: RID, vertices: PackedVector3Array) 🔗
Устанавливает вершины контура для препятствия. Если вершины закручены по часовой стрелке, агенты будут вталкиваться препятствием, в противном случае они будут выталкиваться.
void parse_source_geometry_data(navigation_mesh: NavigationMesh, source_geometry_data: NavigationMeshSourceGeometryData3D, root_node: Node, callback: Callable = Callable()) 🔗
Анализирует SceneTree на предмет исходной геометрии в соответствии со свойствами navigation_mesh. Обновляет предоставленный ресурс source_geometry_data полученными данными. Затем ресурс можно использовать для запекания навигационной сетки с помощью bake_from_source_geometry_data(). После завершения процесса будет вызван необязательный callback.
Примечание: Эта функция должна выполняться в основном потоке или с отложенным вызовом, поскольку SceneTree не является потокобезопасным.
Производительность: Несмотря на удобство, чтение массивов данных из ресурсов Mesh может отрицательно повлиять на частоту кадров. Данные должны быть получены от графического процессора, останавливая RenderingServer в процессе. Для производительности предпочтительнее использовать, например, формы столкновений или создавать массивы данных полностью в коде.
void query_path(parameters: NavigationPathQueryParameters3D, result: NavigationPathQueryResult3D, callback: Callable = Callable()) 🔗
Запрашивает путь в заданной навигационной карте. Начальная и конечная позиция, а также другие параметры определяются через NavigationPathQueryParameters3D. Обновляет предоставленный объект результата NavigationPathQueryResult3D путем среди других результатов, запрошенных запросом. После завершения процесса будет вызван необязательный callback.
void region_bake_navigation_mesh(navigation_mesh: NavigationMesh, root_node: Node) 🔗
Устарело: This method is deprecated due to core threading changes. To upgrade existing code, first create a NavigationMeshSourceGeometryData3D resource. Use this resource with parse_source_geometry_data() to parse the SceneTree for nodes that should contribute to the navigation mesh baking. The SceneTree parsing needs to happen on the main thread. After the parsing is finished use the resource with bake_from_source_geometry_data() to bake a navigation mesh.
Запекает navigation_mesh с исходной геометрией запекания, собранной, начиная с root_node.
Создает новый регион.
AABB region_get_bounds(region: RID) const 🔗
Возвращает выровненный по осям ограничивающий прямоугольник для преобразованной навигационной сетки region.
Vector3 region_get_closest_point(region: RID, to_point: Vector3) const 🔗
Возвращает точку поверхности навигационной сетки, ближайшую к указанному to_point в навигационной region.
Vector3 region_get_closest_point_normal(region: RID, to_point: Vector3) const 🔗
Возвращает нормаль поверхности навигационной сетки, ближайшую к указанному to_point в навигационной region.
Vector3 region_get_closest_point_to_segment(region: RID, start: Vector3, end: Vector3, use_collision: bool = false) const 🔗
Возвращает точку поверхности сетки навигации, ближайшую к предоставленным сегментам start и end в навигационной области region.
Если use_collision равно true, проверка ближайшей точки выполняется только тогда, когда сегмент пересекается с поверхностью сетки навигации.
Vector3 region_get_connection_pathway_end(region: RID, connection: int) const 🔗
Возвращает конечную точку соединения. connection — это индекс между 0 и возвращаемым значением region_get_connections_count().
Vector3 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 объекта, который управляет этим регионом.
Vector3 region_get_random_point(region: RID, navigation_layers: int, uniformly: bool) const 🔗
Возвращает случайную позицию, выбранную из всех полигонов региона с соответствующим navigation_layers.
Если uniformly равен true, все полигоны региона и грани взвешиваются по площади их поверхности (медленнее).
Если uniformly равен false, выбираются только случайный полигон и грань (быстрее).
Transform3D 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 🔗
Возвращает true, если навигационный region настроен на использование краевых соединений для соединения с другими навигационными регионами в непосредственной близости от границы краевого соединения навигационной карты.
bool region_owns_point(region: RID, point: Vector3) 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_mesh(region: RID, navigation_mesh: NavigationMesh) 🔗
Устанавливает навигационную сетку для региона.
void region_set_owner_id(region: RID, owner_id: int) 🔗
Установите ObjectID объекта, который управляет этим регионом.
void region_set_transform(region: RID, transform: Transform3D) 🔗
Устанавливает глобальную трансформацию для региона.
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.
PackedVector3Array simplify_path(path: PackedVector3Array, 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- Ссылка NavigationMesh, используемая для определения настроек анализа. НЕ редактируйте и не добавляйте напрямую в навигационную сетку.source_geometry_data- Ссылка NavigationMeshSourceGeometryData3D. Добавьте пользовательскую исходную геометрию для запекания навигационной сетки в этот объект.node- Node, который анализируется.