Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Verwendung von NavigationMaps
Eine NavigationMap ist eine abstrakte Navigationswelt auf dem NavigationServer, die durch eine NavigationServer-RID identifiziert wird.
Eine Map kann eine nahezu unendliche Anzahl von Navigationsregionen enthalten und mit Navigations-Meshes verbinden, um die durchquerbaren Bereiche einer Spielwelt für die Pfadfindung zu bilden.
Eine Map kann Ausweichagenten enthalten. Die Kollisionsvermeidung wird auf der Grundlage der in der Karte vorhandenen Agenten berechnet.
Bemerkung
Verschiedene NavigationMaps sind vollständig voneinander isoliert, aber Navigationsregionen und Ausweichagenten können zwischen verschiedenen Maps wechseln. Der Wechsel wird bei der Synchronisation des Navigationsservers wirksam.
Default-Navigations-Maps
Standardmäßig erstellt Godot eine Navigations-Map für jeden World2D und World3D des Root-Viewports.
Die 2D-Default-Navigations-Map-RID kann mit get_world_2d().get_navigation_map() von jedem von Node2D erbenden Node erhalten werden.
Die 3D-Default-Navigations-Map-RID kann mit get_world_3d().get_navigation_map() von jedem von Node3D erbenden Node erhalten werden.
extends Node2D
func _ready() -> void:
var default_navigation_map_rid: RID = get_world_2d().get_navigation_map()
public partial class MyNode2D : Node2D
{
public override void _Ready()
{
Rid defaultNavigationMapRid = GetWorld2D().NavigationMap;
}
}
extends Node3D
func _ready() -> void:
var default_navigation_map_rid: RID = get_world_3d().get_navigation_map()
public partial class MyNode3D : Node3D
{
public override void _Ready()
{
Rid defaultNavigationMapRid = GetWorld3D().NavigationMap;
}
}
Neue Navigations-Maps erstellen
Der NavigationServer kann so viele Navigations-Maps erstellen und unterstützen, wie für ein bestimmtes Gameplay erforderlich sind. Zusätzliche Navigations-Maps werden direkt über die NavigationServer-API erstellt und verwaltet, z.B. um verschiedene Ausweichagenten oder Fortbewegungsarten von Akteuren zu unterstützen.
Für Beispiele für die Verwendung verschiedener Navigations-Maps siehe Unterstützung verschiedener Akteurstypen und Unterstützung für verschiedene Akteur-Forbewegungsarten.
Jede Navigations-Map synchronisiert einzeln die in der Warteschlange stehenden Änderungen mit ihren Navigationsregionen und Ausweichagenten. Eine Navigationskarte, die keine Änderungen erhalten hat, verbraucht wenig bis gar keine Verarbeitungszeit. Navigationsregionen und Ausweichagenten können nur Teil einer einzigen Navigations-Map sein, aber sie können jederzeit die Map wechseln.
Bemerkung
Ein Wechsel der Navigations-Map wird erst nach der nächsten Synchronisation des NavigationServers wirksam.
extends Node2D
func _ready() -> void:
var new_navigation_map: RID = NavigationServer2D.map_create()
NavigationServer2D.map_set_active(new_navigation_map, true)
public partial class MyNode2D : Node2D
{
public override void _Ready()
{
Rid newNavigationMap = NavigationServer2D.MapCreate();
NavigationServer2D.MapSetActive(newNavigationMap, true);
}
}
extends Node3D
func _ready() -> void:
var new_navigation_map: RID = NavigationServer3D.map_create()
NavigationServer3D.map_set_active(new_navigation_map, true)
public partial class MyNode3D : Node3D
{
public override void _Ready()
{
Rid newNavigationMap = NavigationServer3D.MapCreate();
NavigationServer3D.MapSetActive(newNavigationMap, true);
}
}
Bemerkung
Es gibt keinen Unterschied zwischen Navigations-Maps, die mit der NavigationServer2D-API oder der NavigationServer3D-API erstellt wurden.