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