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...
Unterstützung für verschiedene Akteur-Forbewegungsarten

Um verschiedene Fortbewegungsarten von Akteuren wie Kauern und Kriechen zu unterstützen, ist ein ähnlicher Map-Aufbau wie bei der Unterstützung von Unterstützung verschiedener Akteurstypen erforderlich.
Backen Sie verschiedene Navigations-Meshes mit einer angemessenen Höhe für geduckte oder kriechende Akteure, damit sie Wege durch die engen Abschnitte in Ihrer Spielwelt finden können.
Wenn ein Akteur seinen Bewegungszustand ändert, z.B. aufsteht, sich duckt oder krabbelt, wird die entsprechende Karte nach einem Pfad abgefragt.
Wenn sich das Ausweichverhalten auch mit der Fortbewegung ändern soll, z.B. nur im Stehen ausweichen oder nur anderen Agenten im gleichen Fortbewegungszustand ausweichen, wechseln Sie bei jeder Änderung der Fortbewegung den Ausweichagenten der Akteure auf eine andere Ausweich-Map.
func update_path():
if actor_standing:
path = NavigationServer3D.map_get_path(standing_navigation_map_rid, start_position, target_position, true)
elif actor_crouching:
path = NavigationServer3D.map_get_path(crouched_navigation_map_rid, start_position, target_position, true)
elif actor_crawling:
path = NavigationServer3D.map_get_path(crawling_navigation_map_rid, start_position, target_position, true)
func change_agent_avoidance_state():
if actor_standing:
NavigationServer3D.agent_set_map(avoidance_agent_rid, standing_navigation_map_rid)
elif actor_crouching:
NavigationServer3D.agent_set_map(avoidance_agent_rid, crouched_navigation_map_rid)
elif actor_crawling:
NavigationServer3D.agent_set_map(avoidance_agent_rid, crawling_navigation_map_rid)
private void UpdatePath()
{
if (_actorStanding)
{
_path = NavigationServer3D.MapGetPath(_standingNavigationMapRid, _startPosition, _targetPosition, true);
}
else if (_actorCrouching)
{
_path = NavigationServer3D.MapGetPath(_crouchedNavigationMapRid, _startPosition, _targetPosition, true);
}
else if (_actorCrawling)
{
_path = NavigationServer3D.MapGetPath(_crawlingNavigationMapRid, _startPosition, _targetPosition, true);
}
}
private void ChangeAgentAvoidanceState()
{
if (_actorStanding)
{
NavigationServer3D.AgentSetMap(_avoidanceAgentRid, _standingNavigationMapRid);
}
else if (_actorCrouching)
{
NavigationServer3D.AgentSetMap(_avoidanceAgentRid, _crouchedNavigationMapRid);
}
else if (_actorCrawling)
{
NavigationServer3D.AgentSetMap(_avoidanceAgentRid, _crawlingNavigationMapRid);
}
}
Bemerkung
Während eine Pfadabfrage für mehrere Maps sofort ausgeführt werden kann, wird der Wechsel der Map des Ausweichagenten erst bei der nächsten Serversynchronisation wirksam.