NavigationPolygon
Экспериментальное: This class may be changed or removed in future versions.
Наследует: Resource < RefCounted < Object
Двумерная навигационная сетка, описывающая проходимую поверхность для поиска пути.
Описание
Навигационную сетку можно создать либо путем запекания с помощью NavigationServer2D, либо путем добавления вершин и массивов индексов выпуклых полигонов вручную.
Для запекания навигационной сетки необходимо добавить как минимум один контур, определяющий внешние границы запекаемой области.
var new_navigation_mesh = NavigationPolygon.new()
var bounding_outline = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
new_navigation_mesh.add_outline(bounding_outline)
NavigationServer2D.bake_from_source_geometry_data(new_navigation_mesh, NavigationMeshSourceGeometryData2D.new());
$NavigationRegion2D.navigation_polygon = new_navigation_mesh
var newNavigationMesh = new NavigationPolygon();
Vector2[] boundingOutline = [new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0)];
newNavigationMesh.AddOutline(boundingOutline);
NavigationServer2D.BakeFromSourceGeometryData(newNavigationMesh, new NavigationMeshSourceGeometryData2D());
GetNode<NavigationRegion2D>("NavigationRegion2D").NavigationPolygon = newNavigationMesh;
Добавление вершин и индексов полигонов вручную.
var new_navigation_mesh = NavigationPolygon.new()
var new_vertices = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
new_navigation_mesh.vertices = new_vertices
var new_polygon_indices = PackedInt32Array([0, 1, 2, 3])
new_navigation_mesh.add_polygon(new_polygon_indices)
$NavigationRegion2D.navigation_polygon = new_navigation_mesh
var newNavigationMesh = new NavigationPolygon();
Vector2[] newVertices = [new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0)];
newNavigationMesh.Vertices = newVertices;
int[] newPolygonIndices = [0, 1, 2, 3];
newNavigationMesh.AddPolygon(newPolygonIndices);
GetNode<NavigationRegion2D>("NavigationRegion2D").NavigationPolygon = newNavigationMesh;
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
void |
add_outline(outline: PackedVector2Array) |
void |
add_outline_at_index(outline: PackedVector2Array, index: int) |
void |
add_polygon(polygon: PackedInt32Array) |
void |
clear() |
void |
|
void |
|
get_outline(idx: int) const |
|
get_outline_count() const |
|
get_parsed_collision_mask_value(layer_number: int) const |
|
get_polygon(idx: int) |
|
get_polygon_count() const |
|
get_vertices() const |
|
void |
|
void |
remove_outline(idx: int) |
void |
set_outline(idx: int, outline: PackedVector2Array) |
void |
set_parsed_collision_mask_value(layer_number: int, value: bool) |
void |
set_vertices(vertices: PackedVector2Array) |
Перечисления
enum SamplePartitionType: 🔗
SamplePartitionType SAMPLE_PARTITION_CONVEX_PARTITION = 0
Выпуклое разбиение, в результате которого получается навигационная сетка с выпуклыми многоугольниками.
SamplePartitionType SAMPLE_PARTITION_TRIANGULATE = 1
Триангуляционное разбиение, в результате которого получается навигационная сетка с треугольными многоугольниками.
SamplePartitionType SAMPLE_PARTITION_MAX = 2
Представляет размер перечисления SamplePartitionType.
enum ParsedGeometryType: 🔗
ParsedGeometryType PARSED_GEOMETRY_MESH_INSTANCES = 0
Анализирует экземпляры сетки как геометрию препятствия. Сюда входят узлы Polygon2D, MeshInstance2D, MultiMeshInstance2D и TileMap.
Сетки анализируются только тогда, когда они используют формат поверхности 2D вершин.
ParsedGeometryType PARSED_GEOMETRY_STATIC_COLLIDERS = 1
Анализирует коллайдеры StaticBody2D и TileMap как геометрию препятствия. Коллайдер должен находиться в любом из слоев, указанных parsed_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
Сканирует узлы в группе и их дочерние узлы рекурсивно на предмет геометрии. Группа указывается source_geometry_group_name.
SourceGeometryMode SOURCE_GEOMETRY_GROUPS_EXPLICIT = 2
Использует узлы в группе для геометрии. Группа указывается source_geometry_group_name.
SourceGeometryMode SOURCE_GEOMETRY_MAX = 3
Представляет размер перечисления SourceGeometryMode.
Описания свойств
Расстояние, на которое будет размываться/сжиматься поверхность, доступная для проходимости, при запекании навигационной сетки.
Примечание: Радиус должен быть равен или больше 0.0. Если радиус равен 0.0, исправить недопустимые наложения контуров и другие ошибки точности в процессе запекания будет невозможно. В результате некоторые препятствия могут быть некорректно исключены из финальной навигационной сетки или могут привести к удалению полигонов навигационной сетки.
Rect2 baking_rect = Rect2(0, 0, 0, 0) 🔗
Если запекание Rect2 имеет область, запекание навигационной сетки будет ограничено ее охватывающей областью.
Vector2 baking_rect_offset = Vector2(0, 0) 🔗
Смещение позиции, примененное к baking_rect Rect2.
Размер ненавигируемой границы вокруг ограничивающей области запекания, определяемой baking_rect Rect2.
В сочетании с baking_rect размер границы может использоваться для запекания навигационных сеток, выровненных по тайлам, без уменьшения краев тайлов на agent_radius.
Размер ячейки, используемый для растеризации вершин навигационной сетки. Должен совпадать с размером ячейки на навигационной карте.
int parsed_collision_mask = 4294967295 🔗
Физические слои для сканирования на предмет статических коллайдеров.
Используется только когда parsed_geometry_type равен PARSED_GEOMETRY_STATIC_COLLIDERS или PARSED_GEOMETRY_BOTH.
ParsedGeometryType parsed_geometry_type = 2 🔗
void set_parsed_geometry_type(value: ParsedGeometryType)
ParsedGeometryType get_parsed_geometry_type()
Определяет, какой тип узлов будет анализироваться как геометрия.
SamplePartitionType sample_partition_type = 0 🔗
void set_sample_partition_type(value: SamplePartitionType)
SamplePartitionType get_sample_partition_type()
Алгоритм разбиения для создания полигонов навигационной сетки.
StringName source_geometry_group_name = &"navigation_polygon_source_geometry_group" 🔗
void set_source_geometry_group_name(value: StringName)
StringName get_source_geometry_group_name()
Имя группы узлов, которые следует проанализировать для запекания исходной геометрии.
Используется только когда source_geometry_mode — SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN или SOURCE_GEOMETRY_GROUPS_EXPLICIT.
SourceGeometryMode source_geometry_mode = 0 🔗
void set_source_geometry_mode(value: SourceGeometryMode)
SourceGeometryMode get_source_geometry_mode()
Источник геометрии, используемой при выпечке.
Описания метода
void add_outline(outline: PackedVector2Array) 🔗
Добавляет PackedVector2Array, содержащий вершины контура, к внутреннему массиву, содержащему все контуры.
void add_outline_at_index(outline: PackedVector2Array, index: int) 🔗
Добавляет PackedVector2Array, содержащий вершины контура, во внутренний массив, содержащий все контуры в фиксированной позиции.
void add_polygon(polygon: PackedInt32Array) 🔗
Добавляет полигон, используя индексы вершин, которые вы получаете при вызове get_vertices().
void clear() 🔗
Очищает внутренние массивы вершин и индексов полигонов.
void clear_outlines() 🔗
Очищает массив контуров, но не очищает вершины и полигоны, созданные ими.
void clear_polygons() 🔗
Очищает массив полигонов, но не очищает массив контуров и вершин.
NavigationMesh get_navigation_mesh() 🔗
Возвращает NavigationMesh, полученную из этого навигационного полигона. Эту навигационную сетку можно использовать для обновления навигационной сетки региона напрямую с помощью API NavigationServer3D.region_set_navigation_mesh().
PackedVector2Array get_outline(idx: int) const 🔗
Возвращает PackedVector2Array, содержащий вершины контура, созданного в редакторе или с помощью скрипта.
int get_outline_count() const 🔗
Возвращает количество контуров, созданных в редакторе или скриптом.
bool get_parsed_collision_mask_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой parsed_collision_mask, учитывая layer_number от 1 до 32.
PackedInt32Array get_polygon(idx: int) 🔗
Возвращает PackedInt32Array, содержащий индексы вершин созданного полигона.
int get_polygon_count() const 🔗
Возвращает количество всех полигонов.
PackedVector2Array get_vertices() const 🔗
Возвращает PackedVector2Array, содержащий все вершины, используемые для создания полигонов.
void make_polygons_from_outlines() 🔗
Устарело: Use NavigationServer2D.parse_source_geometry_data() and NavigationServer2D.bake_from_source_geometry_data() instead.
Создает полигоны из контуров, добавленных в редакторе или с помощью скрипта.
void remove_outline(idx: int) 🔗
Удаляет контур, созданный в редакторе или скриптом. Для обновления полигонов необходимо вызвать make_polygons_from_outlines().
void set_outline(idx: int, outline: PackedVector2Array) 🔗
Изменяет контур, созданный в редакторе или скриптом. Для обновления полигонов необходимо вызвать make_polygons_from_outlines().
void set_parsed_collision_mask_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в parsed_collision_mask при заданном layer_number от 1 до 32.
void set_vertices(vertices: PackedVector2Array) 🔗
Задает вершины, которые затем можно индексировать для создания полигонов с помощью метода add_polygon().