Подключение навигационных сеток
Различные NavigationMeshes автоматически объединяются NavigationServer, когда по крайней мере две позиции вершин одного ребра точно перекрываются.
Для подключения на произвольных расстояниях см. Использование NavigationLinks.
То же самое верно для нескольких ресурсов NavigationPolygon. Если точки их контуров точно перекрываются, NavigationServer их объединит. Для соединения контуры NavigationPolygon должны принадлежать разным ресурсам NavigationPolygon.
Перекрывающиеся или пересекающиеся контуры одного и того же NavigationPolygon приведут к сбою создания навигационной сетки. Перекрывающиеся или пересекающиеся контуры разных NavigationPolygon часто не позволяют создать соединения рёбер навигационной области на NavigationServer, поэтому их следует избегать.
Предупреждение
"Точно (Exactly)" означает "точно (exactly)" для объединения позиций вершин. Небольшие ошибки с плавающей точкой, которые довольно часто возникают при импорте сеток, могут помешать успешному объединению вершин.
В качестве альтернативы, навигационные сетки не объединяются, но всё равно считаются соединёнными сервером NavigationServer, когда их края практически параллельны и находятся на небольшом расстоянии друг от друга. Расстояние соединения определяется параметром edge_connection_margin для каждой навигационной карты. Во многих случаях края навигационных сеток не могут быть правильно соединены при их частичном перекрытии. Для обеспечения согласованного поведения слияния рекомендуется избегать любого перекрытия навигационных сеток.
Если отладка навигации включена и NavigationServer активен, установленные соединения навигационной сетки будут визуализированы. Подробнее о параметрах отладки навигации см. в документе Инструменты отладки навигации.
Значение 2D edge_connection_margin по умолчанию можно изменить в настройках проекта в разделе navigation/2d/default_edge_connection_margin.
Значение 3D edge_connection_margin по умолчанию можно изменить в настройках проекта в разделе navigation/3d/default_edge_connection_margin.
Значение поля соединения ребер любой навигационной карты также можно изменить во время выполнения с помощью API NavigationServer.
extends Node2D
func _ready() -> void:
# 2D margins are designed to work with 2D "pixel" values.
var default_map_rid: RID = get_world_2d().get_navigation_map()
NavigationServer2D.map_set_edge_connection_margin(default_map_rid, 50.0)
using Godot;
public partial class MyNode2D : Node2D
{
public override void _Ready()
{
// 2D margins are designed to work with 2D "pixel" values.
Rid defaultMapRid = GetWorld2D().NavigationMap;
NavigationServer2D.MapSetEdgeConnectionMargin(defaultMapRid, 50.0f);
}
}
extends Node3D
func _ready() -> void:
# 3D margins are designed to work with 3D world unit values.
var default_map_rid: RID = get_world_3d().get_navigation_map()
NavigationServer3D.map_set_edge_connection_margin(default_map_rid, 0.5)
using Godot;
public partial class MyNode3D : Node3D
{
public override void _Ready()
{
// 3D margins are designed to work with 3D world unit values.
Rid defaultMapRid = GetWorld3D().NavigationMap;
NavigationServer3D.MapSetEdgeConnectionMargin(defaultMapRid, 0.5f);
}
}
Примечание
Изменение поля соединения ребер вызовет полное обновление всех соединений навигационной сетки на NavigationServer.