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...
Suportar diferentes locomoções de atores
Para suportar diferentes locomoções de atores, como agachar-se e arrastar-se, é necessária uma configuração de mapa semelhante à que suporta Suporte a diferentes tipos de agentes (actors).
Gere diferentes malhas de navegação com uma altura apropriada para atores agachados ou se arrastando, para que eles possam encontrar caminhos através dessas seções estreitas no mundo do seu jogo.
Quando um ator muda de estado de locomoção, por exemplo, levanta-se, começa a se agachar ou a se arrastar, consulte o mapa apropriado para obter um caminho.
Se o comportamento de desvio de obstáculos também deve mudar com a locomoção, por exemplo, apenas desviar enquanto estiver de pé ou apenas desviar de outros agentes no mesmo estado de locomoção, alterne o agente de desvio do ator para outro mapa de desvio a cada mudança de locomoção.
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);
}
}
Nota
Embora uma consulta de caminho possa ser executada imediatamente para múltiplos mapas, a alternância do mapa do agente de desvio só entrará em vigor após a próxima sincronização do servidor.