@@ -51,3 +51,71 @@ The visibility of the debug can also be controlled in the Editor 3D Viewport giz
5151A navigation link does not provide any automated movement through the link. Instead, when
5252an agent reaches the position of a link, game code needs to react (e.g. through area triggers) and provide means for the agent
5353to move through the link to end up at the links other position (e.g. through teleport or animation) to continue along the path.
54+
55+ Navigation link script templates
56+ --------------------------------
57+
58+ The following script uses the NavigationServer to create a new navigation link.
59+
60+ .. tabs ::
61+ .. code-tab :: gdscript 2D GDScript
62+
63+ extends Node2D
64+
65+ var link_rid: RID
66+ var link_start_position: Vector2
67+ var link_end_position: Vector2
68+
69+ func _ready() -> void:
70+ link_rid = NavigationServer2D.link_create()
71+
72+ var link_owner_id: int = get_instance_id()
73+ var link_enter_cost: float = 1.0
74+ var link_travel_cost: float = 1.0
75+ var link_navigation_layers: int = 1
76+ var link_bidirectional: bool = true
77+
78+ NavigationServer2D.link_set_owner_id(link_rid, link_owner_id)
79+ NavigationServer2D.link_set_enter_cost(link_rid, link_enter_cost)
80+ NavigationServer2D.link_set_travel_cost(link_rid, link_travel_cost)
81+ NavigationServer2D.link_set_navigation_layers(link_rid, link_navigation_layers)
82+ NavigationServer2D.link_set_bidirectional(link_rid, link_bidirectional)
83+
84+ # Enable the link and set it to the default navigation map.
85+ NavigationServer2D.link_set_enabled(link_rid, true)
86+ NavigationServer2D.link_set_map(link_rid, get_world_2d().get_navigation_map())
87+
88+ # Move the 2 link positions to their intended global positions.
89+ NavigationServer2D.link_set_start_position(link_rid, link_start_position)
90+ NavigationServer2D.link_set_end_position(link_rid, link_end_position)
91+
92+ .. code-tab :: gdscript 3D GDScript
93+
94+ extends Node3D
95+
96+ var link_rid: RID
97+ var link_start_position: Vector3
98+ var link_end_position: Vector3
99+
100+ func _ready() -> void:
101+ link_rid = NavigationServer3D.link_create()
102+
103+ var link_owner_id: int = get_instance_id()
104+ var link_enter_cost: float = 1.0
105+ var link_travel_cost: float = 1.0
106+ var link_navigation_layers: int = 1
107+ var link_bidirectional: bool = true
108+
109+ NavigationServer3D.link_set_owner_id(link_rid, link_owner_id)
110+ NavigationServer3D.link_set_enter_cost(link_rid, link_enter_cost)
111+ NavigationServer3D.link_set_travel_cost(link_rid, link_travel_cost)
112+ NavigationServer3D.link_set_navigation_layers(link_rid, link_navigation_layers)
113+ NavigationServer3D.link_set_bidirectional(link_rid, link_bidirectional)
114+
115+ # Enable the link and set it to the default navigation map.
116+ NavigationServer3D.link_set_enabled(link_rid, true)
117+ NavigationServer3D.link_set_map(link_rid, get_world_3d().get_navigation_map())
118+
119+ # Move the 2 link positions to their intended global positions.
120+ NavigationServer3D.link_set_start_position(link_rid, link_start_position)
121+ NavigationServer3D.link_set_end_position(link_rid, link_end_position)
0 commit comments