Skip to content

Commit 6d60678

Browse files
committed
Update navigation different actor types for new SourceGeometryData
Updates navigation different actor types for new SourceGeometryData.
1 parent 8d5eeed commit 6d60678

File tree

1 file changed

+45
-30
lines changed

1 file changed

+45
-30
lines changed

tutorials/navigation/navigation_different_actor_types.rst

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,51 +16,66 @@ The same approach can be used to distinguish between e.g. landwalking, swimming
1616
.. tabs::
1717
.. code-tab:: gdscript GDScript
1818

19-
# create navigation mesh resources for each actor size
19+
# Create a navigation mesh resource for each actor size.
2020
var navigation_mesh_standard_size: NavigationMesh = NavigationMesh.new()
2121
var navigation_mesh_small_size: NavigationMesh = NavigationMesh.new()
2222
var navigation_mesh_huge_size: NavigationMesh = NavigationMesh.new()
2323

24-
# set appropriated agent parameters
24+
# Set appropriated agent parameters.
2525
navigation_mesh_standard_size.agent_radius = 0.5
2626
navigation_mesh_standard_size.agent_height = 1.8
2727
navigation_mesh_small_size.agent_radius = 0.25
2828
navigation_mesh_small_size.agent_height = 0.7
2929
navigation_mesh_huge_size.agent_radius = 1.5
3030
navigation_mesh_huge_size.agent_height = 2.5
3131

32-
# get the root node for the baking to parse geometry
32+
# Get the root node to parse geometry for the baking.
3333
var root_node: Node3D = get_node("NavigationMeshBakingRootNode")
3434

35-
# bake the navigation geometry for each agent size
36-
NavigationMeshGenerator.bake(navigation_mesh_standard_size, root_node)
37-
NavigationMeshGenerator.bake(navigation_mesh_small_size, root_node)
38-
NavigationMeshGenerator.bake(navigation_mesh_huge_size, root_node)
35+
# Create the source geometry resource that will hold the parsed geometry data.
36+
var source_geometry_data: NavigationMeshSourceGeometryData3D = NavigationMeshSourceGeometryData3D.new()
3937

40-
# create different navigation maps on the NavigationServer
38+
# Parse the source geometry from the SceneTree on the main thread.
39+
# The navigation mesh is only required for the parse settings so any of the three will do.
40+
NavigationServer3D.parse_source_geometry_data(navigation_mesh_standard_size, source_geometry_data, root_node)
41+
42+
# Bake the navigation geometry for each agent size from the same source geometry.
43+
# If required for performance this baking step could also be done on background threads.
44+
NavigationServer3D.bake_from_source_geometry_data(navigation_mesh_standard_size, source_geometry_data)
45+
NavigationServer3D.bake_from_source_geometry_data(navigation_mesh_small_size, source_geometry_data)
46+
NavigationServer3D.bake_from_source_geometry_data(navigation_mesh_huge_size, source_geometry_data)
47+
48+
# Create different navigation maps on the NavigationServer.
4149
var navigation_map_standard: RID = NavigationServer3D.map_create()
4250
var navigation_map_small: RID = NavigationServer3D.map_create()
4351
var navigation_map_huge: RID = NavigationServer3D.map_create()
4452

45-
# create a region for each map
46-
var navigation_map_standard_region: RID = NavigationServer3D.region_create()
47-
var navigation_map_small_region: RID = NavigationServer3D.region_create()
48-
var navigation_map_huge_region: RID = NavigationServer3D.region_create()
49-
50-
# set navigation mesh for each region
51-
NavigationServer3D.region_set_navigation_mesh(navigation_map_standard_region, navigation_mesh_standard_size)
52-
NavigationServer3D.region_set_navigation_mesh(navigation_map_small_region, navigation_mesh_small_size)
53-
NavigationServer3D.region_set_navigation_mesh(navigation_map_huge_region, navigation_mesh_huge_size)
54-
55-
# add regions to maps
56-
navigation_map_standard_region.region_set_map(navigation_map_standard_region, navigation_map_standard)
57-
navigation_map_small_region.region_set_map(navigation_map_small_region, navigation_map_small)
58-
navigation_map_huge_region.region_set_map(navigation_map_huge_region, navigation_map_huge)
59-
60-
# wait a physics frame for sync
61-
await get_tree().physics_frame
62-
63-
# query paths for each size
64-
var path_standard_agent = NavigationServer3D.map_get_path(navigation_map_standard, start_pos, end_pos, true)
65-
var path_small_agent = NavigationServer3D.map_get_path(navigation_mesh_small_size, start_pos, end_pos, true)
66-
var path_huge_agent = NavigationServer3D.map_get_path(navigation_map_huge, start_pos, end_pos, true)
53+
# Set the new navigation maps as active.
54+
NavigationServer3D.map_set_active(navigation_map_standard, true)
55+
NavigationServer3D.map_set_active(navigation_map_small, true)
56+
NavigationServer3D.map_set_active(navigation_map_huge, true)
57+
58+
# Create a region for each map.
59+
var navigation_region_standard: RID = NavigationServer3D.region_create()
60+
var navigation_region_small: RID = NavigationServer3D.region_create()
61+
var navigation_region_huge: RID = NavigationServer3D.region_create()
62+
63+
# Add the regions to the maps.
64+
NavigationServer3D.region_set_map(navigation_region_standard, navigation_map_standard)
65+
NavigationServer3D.region_set_map(navigation_region_small, navigation_map_small)
66+
NavigationServer3D.region_set_map(navigation_region_huge, navigation_map_huge)
67+
68+
# Set navigation mesh for each region.
69+
NavigationServer3D.region_set_navigation_mesh(navigation_region_standard, navigation_mesh_standard_size)
70+
NavigationServer3D.region_set_navigation_mesh(navigation_region_small, navigation_mesh_small_size)
71+
NavigationServer3D.region_set_navigation_mesh(navigation_region_huge, navigation_mesh_huge_size)
72+
73+
# Create start and end position for the navigation path query.
74+
var start_pos: Vector3 = Vector3(0.0, 0.0, 0.0)
75+
var end_pos: Vector3 = Vector3(2.0, 0.0, 0.0)
76+
var use_corridorfunnel: bool = true
77+
78+
# Query paths for each agent size.
79+
var path_standard_agent = NavigationServer3D.map_get_path(navigation_map_standard, start_pos, end_pos, use_corridorfunnel)
80+
var path_small_agent = NavigationServer3D.map_get_path(navigation_map_small, start_pos, end_pos, use_corridorfunnel)
81+
var path_huge_agent = NavigationServer3D.map_get_path(navigation_map_huge, start_pos, end_pos, use_corridorfunnel)

0 commit comments

Comments
 (0)