A 2D navigation mesh that describes a traversable surface for pathfinding. A navigation mesh can be created either by baking it with the help of the [NavigationServer2D], or by adding vertices and convex polygon indices arrays manually. To bake a navigation mesh at least one outline needs to be added that defines the outer bounds of the baked area. [codeblocks] [gdscript] 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 [/gdscript] [csharp] var newNavigationMesh = new NavigationPolygon(); var boundingOutline = new Vector2[] { 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; [/csharp] [/codeblocks] Adding vertices and polygon indices manually. [codeblocks] [gdscript] 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 [/gdscript] [csharp] var newNavigationMesh = new NavigationPolygon(); var newVertices = new Vector2[] { new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0) }; newNavigationMesh.Vertices = newVertices; var newPolygonIndices = new int[] { 0, 1, 2, 3 }; newNavigationMesh.AddPolygon(newPolygonIndices); GetNode<NavigationRegion2D>("NavigationRegion2D").NavigationPolygon = newNavigationMesh; [/csharp] [/codeblocks] $DOCS_URL/tutorials/navigation/navigation_using_navigationmeshes.html https://godotengine.org/asset-library/asset/2722 Appends a [PackedVector2Array] that contains the vertices of an outline to the internal array that contains all the outlines. Adds a [PackedVector2Array] that contains the vertices of an outline to the internal array that contains all the outlines at a fixed position. Adds a polygon using the indices of the vertices you get when calling [method get_vertices]. Clears the internal arrays for vertices and polygon indices. Clears the array of the outlines, but it doesn't clear the vertices and the polygons that were created by them. Clears the array of polygons, but it doesn't clear the array of outlines and vertices. Returns the [NavigationMesh] resulting from this navigation polygon. This navigation mesh can be used to update the navigation mesh of a region with the [method NavigationServer3D.region_set_navigation_mesh] API directly (as 2D uses the 3D server behind the scene). Returns a [PackedVector2Array] containing the vertices of an outline that was created in the editor or by script. Returns the number of outlines that were created in the editor or by script. Returns whether or not the specified layer of the [member parsed_collision_mask] is enabled, given a [param layer_number] between 1 and 32. Returns a [PackedInt32Array] containing the indices of the vertices of a created polygon. Returns the count of all polygons. Returns a [PackedVector2Array] containing all the vertices being used to create the polygons. Creates polygons from the outlines added in the editor or by script. Removes an outline created in the editor or by script. You have to call [method make_polygons_from_outlines] for the polygons to update. Changes an outline created in the editor or by script. You have to call [method make_polygons_from_outlines] for the polygons to update. Based on [param value], enables or disables the specified layer in the [member parsed_collision_mask], given a [param layer_number] between 1 and 32. Sets the vertices that can be then indexed to create polygons with the [method add_polygon] method. The distance to erode/shrink the walkable surface when baking the navigation mesh. If the baking [Rect2] has an area the navigation mesh baking will be restricted to its enclosing area. The position offset applied to the [member baking_rect] [Rect2]. The size of the non-navigable border around the bake bounding area defined by the [member baking_rect] [Rect2]. In conjunction with the [member baking_rect] the border size can be used to bake tile aligned navigation meshes without the tile edges being shrunk by [member agent_radius]. The cell size used to rasterize the navigation mesh vertices. Must match with the cell size on the navigation map. The physics layers to scan for static colliders. Only used when [member parsed_geometry_type] is [constant PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]. Determines which type of nodes will be parsed as geometry. See [enum ParsedGeometryType] for possible values. The group name of nodes that should be parsed for baking source geometry. Only used when [member source_geometry_mode] is [constant SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant SOURCE_GEOMETRY_GROUPS_EXPLICIT]. The source of the geometry used when baking. See [enum SourceGeometryMode] for possible values. Parses mesh instances as obstruction geometry. This includes [Polygon2D], [MeshInstance2D], [MultiMeshInstance2D], and [TileMap] nodes. Meshes are only parsed when they use a 2D vertices surface format. Parses [StaticBody2D] and [TileMap] colliders as obstruction geometry. The collider should be in any of the layers specified by [member parsed_collision_mask]. Both [constant PARSED_GEOMETRY_MESH_INSTANCES] and [constant PARSED_GEOMETRY_STATIC_COLLIDERS]. Represents the size of the [enum ParsedGeometryType] enum. Scans the child nodes of the root node recursively for geometry. Scans nodes in a group and their child nodes recursively for geometry. The group is specified by [member source_geometry_group_name]. Uses nodes in a group for geometry. The group is specified by [member source_geometry_group_name]. Represents the size of the [enum SourceGeometryMode] enum.