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...
Usando NavigationMaps
Um NavigationMap é um mundo de navegação abstrato no NavigationServer identificado por um RID do NavigationServer.
Um mapa pode conter e conectar um número quase infinito de regiões de navegação com malhas de navegação para construir as áreas atravessáveis de um mundo de jogo para a busca de caminhos.
Um mapa pode conter agentes de desvio. O desvio de obstáculos (collision avoidance) será calculado com base nos agentes presentes no mapa.
Nota
Diferentes NavigationMaps são completamente isolados uns dos outros, mas as regiões de navegação e os agentes de desvio podem alternar entre mapas diferentes. As alternâncias se tornarão eficazes na sincronização do NavigationServer.
Mapas de navegação padrão
Por padrão, o Godot cria um mapa de navegação para cada World2D e World3D da viewport raiz (root viewport).
O RID do mapa de navegação padrão 2D pode ser obtido com get_world_2d().get_navigation_map() a partir de qualquer nó que herde de Node2D.
O RID do mapa de navegação padrão 3D pode ser obtido com get_world_3d().get_navigation_map() a partir de qualquer nó que herde de Node3D.
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;
}
}
Criando novos mapas de navegação
O NavigationServer pode criar e suportar quantos mapas de navegação forem necessários para uma jogabilidade específica. Mapas de navegação adicionais são criados e manipulados usando a API do NavigationServer diretamente, por exemplo, para suportar diferentes tipos de locomoção de atores ou agentes de desvio.
Para exemplos de usos de diferentes mapas de navegação, consulte Suporte a diferentes tipos de agentes (actors) e Suportar diferentes locomoções de atores.
Cada mapa de navegação sincroniza individualmente as alterações enfileiradas em suas regiões de navegação e agentes de desvio. Um mapa de navegação que não recebeu alterações consumirá pouco ou nenhum tempo de processamento. As regiões de navegação e os agentes de desvio só podem fazer parte de um único mapa de navegação, mas podem mudar de mapa a qualquer momento.
Nota
A mudança de mapa de navegação entrará em vigor apenas após a próxima sincronização do NavigationServer.
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);
}
}
Nota
Não há diferença entre os mapas de navegação criados com a API do NavigationServer2D ou com a API do NavigationServer3D.