Использование NavigationMaps
NavigationMap — это абстрактный навигационный мир на NavigationServer, идентифицируемый NavigationServer RID.
Карта может содержать и соединять практически бесконечное количество навигационных регионов с навигационными сетками для создания проходимых областей игрового мира для поиска пути.
Карта может содержать агентов избегания столкновений. Расчет избегания столкновений будет производиться на основе агентов, присутствующих на карте.
Примечание
Различные NavigationMaps полностью изолированы друг от друга, но навигационные регионы и агенты избегания могут переключаться между разными картами. Переключения вступают в силу после синхронизации с навигационным сервером.
Карты навигации по умолчанию
По умолчанию Godot создает навигационную карту для каждого World2D и World3D корневого окна просмотра.
RID 2D-карты навигации по умолчанию можно получить с помощью get_world_2d().get_navigation_map() из любого Node2D, наследующего Node.
RID трехмерной навигационной карты по умолчанию можно получить с помощью get_world_3d().get_navigation_map() из любого Node3D, наследующего Node.
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;
}
}
Создание новых навигационных карт
NavigationServer может создавать и поддерживать столько навигационных карт, сколько необходимо для конкретного игрового процесса. Дополнительные навигационные карты создаются и обрабатываются непосредственно через API NavigationServer, например, для поддержки различных типов агентов избегания или передвижения акторов.
Примеры использования различных навигационных карт см. в разделах Поддержка разных типов актеров и Поддержка различных движений актеров.
Каждая навигационная карта индивидуально синхронизирует изменения, поставленные в очередь, со своими навигационными регионами и агентами избегания. Навигационная карта, не получившая изменений, практически не потребляет времени на обработку. Навигационные регионы и агенты избегания могут быть частью только одной навигационной карты, но могут в любой момент переключиться между ними.
Примечание
Переключение навигационной карты вступит в силу только после следующей синхронизации 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);
}
}
Примечание
Нет никакой разницы между навигационными картами, созданными с помощью API NavigationServer2D или API NavigationServer3D.