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().