NavigationPolygon
Двумерная навигационная сетка, описывающая проходимую поверхность для поиска пути.
Двумерная навигационная сетка, описывающая проходимую поверхность для поиска пути.
Навигационную сетку можно создать либо путем запекания с помощью NavigationServer2D, либо путем добавления вершин и массивов индексов выпуклых полигонов вручную.
Для запекания навигационной сетки необходимо добавить как минимум один контур, определяющий внешние границы запекаемой области.
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());
GetEntity<NavigationRegion2D>("NavigationRegion2D").NavigationPolygon = newNavigationMesh;Добавление вершин и индексов полигонов вручную.
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);
GetEntity<NavigationRegion2D>("NavigationRegion2D").NavigationPolygon = newNavigationMesh;Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
NavigationPolygonКонструктор
public NavigationPolygon();Свойства13
AgentRadiusСвойство
public float AgentRadius { get; set; }Радиус зазора для запекания проходимой области. Изменение параметра не перезапекает уже построенный ресурс автоматически; после запекания проверьте границы и путь. Это не радиус физической формы или механизма избегания.
BakingRectСвойство
public Rect2 BakingRect { get; set; }Если запекание Rect2 имеет область, запекание навигационной сетки будет ограничено ее охватывающей областью.
BakingRectOffsetСвойство
public Vector2 BakingRectOffset { get; set; }Смещение позиции, примененное к NavigationPolygon.BakingRect Rect2.
BorderSizeСвойство
public float BorderSize { get; set; }Размер ненавигируемой границы вокруг ограничивающей области запекания, определяемой NavigationPolygon.BakingRect Rect2.
В сочетании с NavigationPolygon.BakingRect размер границы может использоваться для запекания навигационных сеток, выровненных по тайлам, без уменьшения краев тайлов на NavigationPolygon.AgentRadius.
CellSizeСвойство
public float CellSize { get; set; }Размер ячейки, используемый для растеризации вершин навигационной сетки. Должен совпадать с размером ячейки на навигационной карте.
OutlinesСвойство
public Reckfell.Collections.Array<Vector2[]> Outlines { get; set; }ParsedCollisionMaskСвойство
public uint ParsedCollisionMask { get; set; }Физические слои для сканирования на предмет статических коллайдеров.
Используется только когда NavigationPolygon.ParsedGeometryType равен NavigationPolygon.ParsedGeometryTypeEnum.StaticColliders или NavigationPolygon.ParsedGeometryTypeEnum.Both.
ParsedGeometryTypeСвойство
public NavigationPolygon.ParsedGeometryTypeEnum ParsedGeometryType { get; set; }Определяет, какой тип узлов будет анализироваться как геометрия.
PolygonsСвойство
public Reckfell.Collections.Array<int[]> Polygons { get; set; }SamplePartitionTypeСвойство
public NavigationPolygon.SamplePartitionTypeEnum SamplePartitionType { get; set; }Алгоритм разбиения для создания полигонов навигационной сетки.
SourceGeometryGroupNameСвойство
public StringName SourceGeometryGroupName { get; set; }Имя группы узлов, которые следует проанализировать для запекания исходной геометрии.
Используется только когда NavigationPolygon.SourceGeometryMode — NavigationPolygon.SourceGeometryModeEnum.GroupsWithChildren или NavigationPolygon.SourceGeometryModeEnum.GroupsExplicit.
SourceGeometryModeСвойство
public NavigationPolygon.SourceGeometryModeEnum SourceGeometryMode { get; set; }Источник геометрии, используемой при выпечке.
VerticesСвойство
public Vector2[] Vertices { get; set; }Методы43
AddOutline2 перегрузки
public void AddOutline(Vector2[] outline);Добавляет Vector2[], содержащий вершины контура, к внутреннему массиву, содержащему все контуры.
| Имя | Тип | По умолчанию |
|---|---|---|
outline | Vector2[] | — |
public void AddOutline(ReadOnlySpan<Vector2> outline);Добавляет Vector2[], содержащий вершины контура, к внутреннему массиву, содержащему все контуры.
| Имя | Тип | По умолчанию |
|---|---|---|
outline | ReadOnlySpan<Vector2> | — |
AddOutlineAtIndex2 перегрузки
public void AddOutlineAtIndex(Vector2[] outline, int index);Добавляет Vector2[], содержащий вершины контура, во внутренний массив, содержащий все контуры в фиксированной позиции.
| Имя | Тип | По умолчанию |
|---|---|---|
outline | Vector2[] | — |
index | int | — |
public void AddOutlineAtIndex(ReadOnlySpan<Vector2> outline, int index);Добавляет Vector2[], содержащий вершины контура, во внутренний массив, содержащий все контуры в фиксированной позиции.
| Имя | Тип | По умолчанию |
|---|---|---|
outline | ReadOnlySpan<Vector2> | — |
index | int | — |
AddPolygon2 перегрузки
public void AddPolygon(int[] polygon);Добавляет полигон, используя индексы вершин, которые вы получаете при вызове NavigationPolygon.GetVertices.
| Имя | Тип | По умолчанию |
|---|---|---|
polygon | int[] | — |
public void AddPolygon(ReadOnlySpan<int> polygon);Добавляет полигон, используя индексы вершин, которые вы получаете при вызове NavigationPolygon.GetVertices.
| Имя | Тип | По умолчанию |
|---|---|---|
polygon | ReadOnlySpan<int> | — |
Clearvoid
public void Clear();Очищает внутренние массивы вершин и индексов полигонов.
ClearOutlinesvoid
public void ClearOutlines();Очищает массив контуров, но не очищает вершины и полигоны, созданные ими.
ClearPolygonsvoid
public void ClearPolygons();Очищает массив полигонов, но не очищает массив контуров и вершин.
GetAgentRadiusfloat
public float GetAgentRadius();floatGetBakingRectRect2
public Rect2 GetBakingRect();Rect2GetBakingRectOffsetVector2
public Vector2 GetBakingRectOffset();Vector2GetBorderSizefloat
public float GetBorderSize();floatGetCellSizefloat
public float GetCellSize();floatGetNavigationMeshNavigationMesh
public NavigationMesh GetNavigationMesh();Возвращает NavigationMesh, полученную из этого навигационного полигона. Эту навигационную сетку можно использовать для обновления навигационной сетки региона напрямую с помощью API NavigationServer3D.RegionSetNavigationMesh.
NavigationMeshGetOutlineVector2[]
public Vector2[] GetOutline(int idx);Возвращает Vector2[], содержащий вершины контура, созданного в редакторе или с помощью скрипта.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
Vector2[]GetOutlineCountint
public int GetOutlineCount();Возвращает количество контуров, созданных в редакторе или скриптом.
intGetParsedCollisionMaskuint
public uint GetParsedCollisionMask();uintGetParsedCollisionMaskValuebool
public bool GetParsedCollisionMaskValue(int layerNumber);Возвращает, включен ли указанный слой NavigationPolygon.ParsedCollisionMask, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetParsedGeometryTypeNavigationPolygon.ParsedGeometryTypeEnum
public NavigationPolygon.ParsedGeometryTypeEnum GetParsedGeometryType();NavigationPolygon.ParsedGeometryTypeEnumGetPolygonint[]
public int[] GetPolygon(int idx);Возвращает int[], содержащий индексы вершин созданного полигона.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
int[]GetPolygonCountint
public int GetPolygonCount();Возвращает число полигонов навигационного ресурса. Значение больше нуля подтверждает наличие данных, но не готовность карты, достижимость цели или физический зазор персонажа.
intКоличество полигонов; 0 означает отсутствие готовых полигонов в этом ресурсе.
GetSamplePartitionTypeNavigationPolygon.SamplePartitionTypeEnum
public NavigationPolygon.SamplePartitionTypeEnum GetSamplePartitionType();NavigationPolygon.SamplePartitionTypeEnumGetSourceGeometryGroupNameStringName
public StringName GetSourceGeometryGroupName();StringNameGetSourceGeometryModeNavigationPolygon.SourceGeometryModeEnum
public NavigationPolygon.SourceGeometryModeEnum GetSourceGeometryMode();NavigationPolygon.SourceGeometryModeEnumGetVerticesVector2[]
public Vector2[] GetVertices();Возвращает Vector2[], содержащий все вершины, используемые для создания полигонов.
Vector2[]MakePolygonsFromOutlinesvoid · Устарело
public void MakePolygonsFromOutlines();Создает полигоны из контуров, добавленных в редакторе или с помощью скрипта.
RemoveOutlinevoid
public void RemoveOutline(int idx);Удаляет контур, созданный в редакторе или скриптом. Для обновления полигонов необходимо вызвать NavigationPolygon.MakePolygonsFromOutlines.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
SetAgentRadiusvoid
public void SetAgentRadius(float agentRadius);| Имя | Тип | По умолчанию |
|---|---|---|
agentRadius | float | — |
SetBakingRectvoid
public void SetBakingRect(Rect2 rect);| Имя | Тип | По умолчанию |
|---|---|---|
rect | Rect2 | — |
SetBakingRectOffsetvoid
public void SetBakingRectOffset(Vector2 rectOffset);| Имя | Тип | По умолчанию |
|---|---|---|
rectOffset | Vector2 | — |
SetBorderSizevoid
public void SetBorderSize(float borderSize);| Имя | Тип | По умолчанию |
|---|---|---|
borderSize | float | — |
SetCellSizevoid
public void SetCellSize(float cellSize);| Имя | Тип | По умолчанию |
|---|---|---|
cellSize | float | — |
SetOutline2 перегрузки
public void SetOutline(int idx, Vector2[] outline);Изменяет контур, созданный в редакторе или скриптом. Для обновления полигонов необходимо вызвать NavigationPolygon.MakePolygonsFromOutlines.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
outline | Vector2[] | — |
public void SetOutline(int idx, ReadOnlySpan<Vector2> outline);Изменяет контур, созданный в редакторе или скриптом. Для обновления полигонов необходимо вызвать NavigationPolygon.MakePolygonsFromOutlines.
| Имя | Тип | По умолчанию |
|---|---|---|
idx | int | — |
outline | ReadOnlySpan<Vector2> | — |
SetParsedCollisionMaskvoid
public void SetParsedCollisionMask(uint mask);| Имя | Тип | По умолчанию |
|---|---|---|
mask | uint | — |
SetParsedCollisionMaskValuevoid
public void SetParsedCollisionMaskValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в NavigationPolygon.ParsedCollisionMask при заданном layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetParsedGeometryTypevoid
public void SetParsedGeometryType(NavigationPolygon.ParsedGeometryTypeEnum geometryType);| Имя | Тип | По умолчанию |
|---|---|---|
geometryType | NavigationPolygon.ParsedGeometryTypeEnum | — |
SetSamplePartitionTypevoid
public void SetSamplePartitionType(NavigationPolygon.SamplePartitionTypeEnum samplePartitionType);| Имя | Тип | По умолчанию |
|---|---|---|
samplePartitionType | NavigationPolygon.SamplePartitionTypeEnum | — |
SetSourceGeometryGroupNamevoid
public void SetSourceGeometryGroupName(StringName groupName);| Имя | Тип | По умолчанию |
|---|---|---|
groupName | StringName | — |
SetSourceGeometryModevoid
public void SetSourceGeometryMode(NavigationPolygon.SourceGeometryModeEnum geometryMode);| Имя | Тип | По умолчанию |
|---|---|---|
geometryMode | NavigationPolygon.SourceGeometryModeEnum | — |
SetVertices2 перегрузки
public void SetVertices(Vector2[] vertices);Задает вершины, которые затем можно индексировать для создания полигонов с помощью метода NavigationPolygon.AddPolygon.
| Имя | Тип | По умолчанию |
|---|---|---|
vertices | Vector2[] | — |
public void SetVertices(ReadOnlySpan<Vector2> vertices);Задает вершины, которые затем можно индексировать для создания полигонов с помощью метода NavigationPolygon.AddPolygon.
| Имя | Тип | По умолчанию |
|---|---|---|
vertices | ReadOnlySpan<Vector2> | — |
NavigationPolygon.ParsedGeometryTypeEnum
| Значение | Описание |
|---|---|
Both = 2 | Оба |
Max = 3 | Представляет размер перечисления |
MeshInstances = 0 | Анализирует экземпляры сетки как геометрию препятствия. Сюда входят узлы |
StaticColliders = 1 | Анализирует коллайдеры |
NavigationPolygon.SamplePartitionTypeEnum
| Значение | Описание |
|---|---|
ConvexPartition = 0 | Выпуклое разбиение, в результате которого получается навигационная сетка с выпуклыми многоугольниками. |
Max = 2 | Представляет размер перечисления |
Triangulate = 1 | Триангуляционное разбиение, в результате которого получается навигационная сетка с треугольными многоугольниками. |
NavigationPolygon.SourceGeometryModeEnum
| Значение | Описание |
|---|---|
GroupsExplicit = 2 | Использует узлы в группе для геометрии. Группа указывается |
GroupsWithChildren = 1 | Сканирует узлы в группе и их дочерние узлы рекурсивно на предмет геометрии. Группа указывается |
Max = 3 | Представляет размер перечисления |
RootNodeChildren = 0 | Рекурсивно сканирует дочерние узлы корневого узла на предмет геометрии. |