NavigationPolygon

实验性: This class may be changed or removed in future versions.

继承: Resource < RefCounted < Object

2D 导航网格,描述用于寻路的可穿越表面。

描述

导航网格可以通过在 NavigationServer2D 的帮助下烘焙它来创建,也可以通过手动添加顶点和凸多边形索引数组来创建。

要烘焙导航网格,至少需要添加一个轮廓来定义烘焙区域的外部边界。

GDScriptC#

  1. var new_navigation_mesh = NavigationPolygon.new()
  2. var bounding_outline = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
  3. new_navigation_mesh.add_outline(bounding_outline)
  4. NavigationServer2D.bake_from_source_geometry_data(new_navigation_mesh, NavigationMeshSourceGeometryData2D.new());
  5. $NavigationRegion2D.navigation_polygon = new_navigation_mesh
  1. var newNavigationMesh = new NavigationPolygon();
  2. var boundingOutline = new Vector2[] { new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0) };
  3. newNavigationMesh.AddOutline(boundingOutline);
  4. NavigationServer2D.BakeFromSourceGeometryData(newNavigationMesh, new NavigationMeshSourceGeometryData2D());
  5. GetNode<NavigationRegion2D>("NavigationRegion2D").NavigationPolygon = newNavigationMesh;

手动添加顶点和多边形索引。

GDScriptC#

  1. var new_navigation_mesh = NavigationPolygon.new()
  2. var new_vertices = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
  3. new_navigation_mesh.vertices = new_vertices
  4. var new_polygon_indices = PackedInt32Array([0, 1, 2, 3])
  5. new_navigation_mesh.add_polygon(new_polygon_indices)
  6. $NavigationRegion2D.navigation_polygon = new_navigation_mesh
  1. var newNavigationMesh = new NavigationPolygon();
  2. var newVertices = new Vector2[] { new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0) };
  3. newNavigationMesh.Vertices = newVertices;
  4. var newPolygonIndices = new int[] { 0, 1, 2, 3 };
  5. newNavigationMesh.AddPolygon(newPolygonIndices);
  6. GetNode<NavigationRegion2D>("NavigationRegion2D").NavigationPolygon = newNavigationMesh;

教程

属性

float

agent_radius

10.0

Rect2

baking_rect

Rect2(0, 0, 0, 0)

Vector2

baking_rect_offset

Vector2(0, 0)

float

border_size

0.0

float

cell_size

1.0

int

parsed_collision_mask

4294967295

ParsedGeometryType

parsed_geometry_type

2

StringName

source_geometry_group_name

&”navigation_polygon_source_geometry_group”

SourceGeometryMode

source_geometry_mode

0

方法

void

add_outline(outline: PackedVector2Array)

void

add_outline_at_index(outline: PackedVector2Array, index: int)

void

add_polygon(polygon: PackedInt32Array)

void

clear()

void

clear_outlines()

void

clear_polygons()

NavigationMesh

get_navigation_mesh()

PackedVector2Array

get_outline(idx: int) const

int

get_outline_count() const

bool

get_parsed_collision_mask_value(layer_number: int) const

PackedInt32Array

get_polygon(idx: int)

int

get_polygon_count() const

PackedVector2Array

get_vertices() const

void

make_polygons_from_outlines()

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 ParsedGeometryType: 🔗

ParsedGeometryType PARSED_GEOMETRY_MESH_INSTANCES = 0

将网格实例解析为障碍几何体。这包括 Polygon2DMeshInstance2DMultiMeshInstance2DTileMap 节点。

仅当网格使用 2D 顶点表面格式时才会对其进行解析。

ParsedGeometryType PARSED_GEOMETRY_STATIC_COLLIDERS = 1

StaticBody2DTileMap 碰撞器解析为障碍几何体。碰撞器应在由 parsed_collision_mask 指定的层中。

ParsedGeometryType PARSED_GEOMETRY_BOTH = 2

PARSED_GEOMETRY_MESH_INSTANCESPARSED_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 枚举的大小。


属性说明

float agent_radius = 10.0 🔗

  • void set_agent_radius(value: float)

  • float get_agent_radius()

烘焙导航网格时侵蚀/收缩可行走表面的距离。


Rect2 baking_rect = Rect2(0, 0, 0, 0) 🔗

  • void set_baking_rect(value: Rect2)

  • Rect2 get_baking_rect()

如果烘焙的 Rect2 存在面积,则导航网格烘焙将被限制在其封闭区域内。


Vector2 baking_rect_offset = Vector2(0, 0) 🔗

  • void set_baking_rect_offset(value: Vector2)

  • Vector2 get_baking_rect_offset()

应用于 baking_rect Rect2 的位置偏移量。


float border_size = 0.0 🔗

  • void set_border_size(value: float)

  • float get_border_size()

baking_rect Rect2 定义的烘焙边界区域周围的不可导航边框的大小。

baking_rect 结合使用,边框大小可用于烘焙图块对齐的导航网格,而图块边缘不会因 agent_radius 而缩小。


float cell_size = 1.0 🔗

  • void set_cell_size(value: float)

  • float get_cell_size()

用于将导航网格顶点栅格化的单元格大小。必须与导航地图上的单元格大小相匹配。


int parsed_collision_mask = 4294967295 🔗

  • void set_parsed_collision_mask(value: int)

  • int get_parsed_collision_mask()

用于扫描静态碰撞器的物理层。

仅在 parsed_geometry_typePARSED_GEOMETRY_STATIC_COLLIDERSPARSED_GEOMETRY_BOTH 时才使用。


ParsedGeometryType parsed_geometry_type = 2 🔗

决定哪种类型的节点可解析为几何图形。可能的取值见 ParsedGeometryType


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_modeSOURCE_GEOMETRY_GROUPS_WITH_CHILDRENSOURCE_GEOMETRY_GROUPS_EXPLICIT 时才使用。


SourceGeometryMode source_geometry_mode = 0 🔗

烘焙时使用的几何体的来源。可能的取值见 SourceGeometryMode


方法说明

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。该导航网格可用于使用 NavigationServer3D.region_set_navigation_mesh API 直接更新区块的导航网格(因为 2D 在幕后使用 3D 服务器)。


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 方法对其进行索引,创建多边形。