Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
NavigationMesh
Экспериментальное: This class may be changed or removed in future versions.
Наследует: Resource < RefCounted < Object
Навигационная сетка, определяющая проходимую территорию и препятствия.
Описание
Навигационная сетка представляет собой набор полигонов, которые определяют, по каким областям среды можно перемещатся, чтобы помочь агентам находить путь в сложных пространствах.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
void |
add_polygon(polygon: PackedInt32Array) |
void |
clear() |
void |
|
void |
create_from_mesh(mesh: Mesh) |
get_collision_mask_value(layer_number: int) const |
|
get_polygon(idx: int) |
|
get_polygon_count() const |
|
get_vertices() const |
|
void |
set_collision_mask_value(layer_number: int, value: bool) |
void |
set_vertices(vertices: PackedVector3Array) |
Перечисления
enum SamplePartitionType: 🔗
SamplePartitionType SAMPLE_PARTITION_WATERSHED = 0
Разделение водораздела. Обычно это лучший выбор, если вы предварительно вычисляете навигационную сетку, используйте его, если у вас большие открытые пространства.
SamplePartitionType SAMPLE_PARTITION_MONOTONE = 1
Монотонное разбиение. Используйте это, если вам нужна быстрая генерация навигационной сетки.
SamplePartitionType SAMPLE_PARTITION_LAYERS = 2
Разделение слоев. Хороший выбор для использования в мозаичной навигационной сетке с тайлами среднего и малого размера.
SamplePartitionType SAMPLE_PARTITION_MAX = 3
Представляет размер перечисления SamplePartitionType.
enum ParsedGeometryType: 🔗
ParsedGeometryType PARSED_GEOMETRY_MESH_INSTANCES = 0
Анализирует экземпляры сетки как геометрию. Сюда входят узлы MeshInstance3D, CSGShape3D и GridMap.
ParsedGeometryType PARSED_GEOMETRY_STATIC_COLLIDERS = 1
Анализирует коллайдеры StaticBody3D как геометрию. Коллайдер должен находиться в любом из слоев, указанных geometry_collision_mask.
ParsedGeometryType PARSED_GEOMETRY_BOTH = 2
Оба PARSED_GEOMETRY_MESH_INSTANCES и PARSED_GEOMETRY_STATIC_COLLIDERS.
ParsedGeometryType PARSED_GEOMETRY_MAX = 3
Представляет размер перечисления ParsedGeometryType.
enum SourceGeometryMode: 🔗
SourceGeometryMode SOURCE_GEOMETRY_ROOT_NODE_CHILDREN = 0
Рекурсивно сканирует дочерние узлы корневого узла на предмет геометрии.
SourceGeometryMode SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN = 1
Сканирует узлы в группе и их дочерние узлы рекурсивно на предмет геометрии. Группа указывается geometry_source_group_name.
SourceGeometryMode SOURCE_GEOMETRY_GROUPS_EXPLICIT = 2
Использует узлы в группе для геометрии. Группа указывается geometry_source_group_name.
SourceGeometryMode SOURCE_GEOMETRY_MAX = 3
Представляет размер перечисления SourceGeometryMode.
Описания свойств
Минимальная высота от пола до потолка, при которой площадь пола все еще будет считаться пригодной для ходьбы.
Примечание: При выпечке это значение будет округлено до ближайшего кратного cell_height.
float agent_max_climb = 0.25 🔗
Минимальная высота уступа, которая считается все еще проходимой.
Примечание: При выпечке это значение будет округлено до ближайшего кратного cell_height.
float agent_max_slope = 45.0 🔗
Максимальный уклон, который считается пригодным для ходьбы, в градусах.
Расстояние, на которое будет размыта/сокращена проходимая область поля высот от препятствий.
Примечание: При запекании это значение будет округлено до ближайшего значения, кратного cell_size.
Примечание: Радиус должен быть равен или больше 0.0. Если радиус равен 0.0, исправить недопустимые наложения контуров и другие ошибки точности во время запекания будет невозможно. В результате некоторые препятствия могут быть некорректно исключены из финальной навигационной сетки или могут привести к удалению полигонов навигационной сетки.
Размер ненавигируемой границы вокруг области запекания.
В сочетании со значением filter_baking_aabb и значением edge_max_error, равным 1.0 или меньше размера границы, может использоваться для запекания навигационных сеток, выровненных по тайлам, без уменьшения краёв тайлов на agent_radius.
Примечание: Если это значение не равно 0.0, оно будет округлено до ближайшего значения, кратного cell_size во время запекания.
Ячейка высоты, используемая для растеризации вершин навигационной сетки по оси Y. Должна совпадать с высотой ячейки на навигационной карте.
Ячейка высоты, используемая для растеризации вершин навигационной сетки на плоскости XZ. Должна совпадать с размером ячейки на навигационной карте.
float detail_sample_distance = 6.0 🔗
Расстояние выборки, используемое при создании сетки детализации, в единицах ячеек.
float detail_sample_max_error = 1.0 🔗
Максимальное расстояние, на которое должна отклоняться поверхность сетки детали от поля высоты, в единицах ячеек.
Максимальное расстояние, на которое края упрощенного контура должны отклоняться от исходного необработанного контура.
Максимально допустимая длина контурных кромок вдоль границы сетки. Значение 0.0 отключает эту функцию.
Примечание: При запекании это значение будет округлено до ближайшего кратного cell_size.
AABB filter_baking_aabb = AABB(0, 0, 0, 0, 0, 0) 🔗
Если запекание AABB имеет объем, запекание навигационной сетки будет ограничено его охватывающей областью.
Vector3 filter_baking_aabb_offset = Vector3(0, 0, 0) 🔗
Смещение позиции, примененное к filter_baking_aabb AABB.
bool filter_ledge_spans = false 🔗
Если true, то пролеты, являющиеся уступами, помечаются как непроходимые.
bool filter_low_hanging_obstacles = false 🔗
Если true, то непроходимые участки помечаются как проходимые, если их максимум находится в пределах agent_max_climb от проходимого соседа.
bool filter_walkable_low_height_spans = false 🔗
Если true, то проходящие пролеты помечаются как непроходимые, если просвет над пролетом меньше, чем agent_height.
int geometry_collision_mask = 4294967295 🔗
Физические слои для сканирования на предмет статических коллайдеров.
Используется только когда geometry_parsed_geometry_type равен PARSED_GEOMETRY_STATIC_COLLIDERS или PARSED_GEOMETRY_BOTH.
ParsedGeometryType geometry_parsed_geometry_type = 2 🔗
void set_parsed_geometry_type(value: ParsedGeometryType)
ParsedGeometryType get_parsed_geometry_type()
Определяет, какой тип узлов будет анализироваться как геометрия.
SourceGeometryMode geometry_source_geometry_mode = 0 🔗
void set_source_geometry_mode(value: SourceGeometryMode)
SourceGeometryMode get_source_geometry_mode()
Источник геометрии, используемой при выпечке.
StringName geometry_source_group_name = &"navigation_mesh_source_group" 🔗
void set_source_group_name(value: StringName)
StringName get_source_group_name()
Имя группы для сканирования геометрии.
Используется только когда geometry_source_geometry_mode равно SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN или SOURCE_GEOMETRY_GROUPS_EXPLICIT.
float region_merge_size = 20.0 🔗
Любые регионы с размером меньше этого будут объединены с регионами большего размера, если это возможно.
Примечание: Это значение будет возведено в квадрат для расчета количества ячеек. Например, значение 20 установит количество ячеек равным 400.
Минимальный размер региона для его создания.
Примечание: Это значение будет возведено в квадрат для расчета минимального количества ячеек, разрешенных для формирования изолированных островных областей. Например, значение 8 установит количество ячеек равным 64.
SamplePartitionType sample_partition_type = 0 🔗
void set_sample_partition_type(value: SamplePartitionType)
SamplePartitionType get_sample_partition_type()
Алгоритм разбиения для создания полигонов навигационной сетки.
float vertices_per_polygon = 6.0 🔗
Максимально допустимое количество вершин для полигонов, создаваемых в процессе преобразования контура в полигон.
Описания метода
void add_polygon(polygon: PackedInt32Array) 🔗
Добавляет полигон, используя индексы вершин, которые вы получаете при вызове get_vertices().
void clear() 🔗
Очищает внутренние массивы вершин и индексов полигонов.
void clear_polygons() 🔗
Очищает массив полигонов, но не очищает массив вершин.
void create_from_mesh(mesh: Mesh) 🔗
Инициализирует навигационную сетку, устанавливая вершины и индексы в соответствии с Mesh.
Примечание: Заданная mesh должна иметь тип Mesh.PRIMITIVE_TRIANGLES и иметь массив индексов.
bool get_collision_mask_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой geometry_collision_mask, учитывая layer_number от 1 до 32.
PackedInt32Array get_polygon(idx: int) 🔗
Возвращает PackedInt32Array, содержащий индексы вершин созданного полигона.
int get_polygon_count() const 🔗
Возвращает количество полигонов в навигационной сетке.
PackedVector3Array get_vertices() const 🔗
Возвращает PackedVector3Array, содержащий все вершины, используемые для создания полигонов.
void set_collision_mask_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в geometry_collision_mask при заданном layer_number от 1 до 32.
void set_vertices(vertices: PackedVector3Array) 🔗
Задает вершины, которые затем можно индексировать для создания полигонов с помощью метода add_polygon().