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...
使用导航地图

NavigationMap 即导航地图,是抽象的导航世界,位于 NavigationServer 中,使用 NavigationServer 的 RID 标识。
地图中可以存放并连接几乎无限数量的导航区块,区块中的导航网格可以用来构建游戏世界中的可达区域,用于寻路操作。
地图中可以包含避障代理。碰撞躲避是根据地图中存在的代理来计算的。
备注
不同 NavigationMap 之间是相互独立的,但是导航区块和避障代理可以在不同地图之间进行切换。切换会在 NavigationServer 同步后生效。
默认导航地图
Godot 默认会为根视口的每个 World2D 和 World3D 创建一个导航地图。
默认的 2D 导航地图 RID 可以从继承自 Node2D 的任何 Node 的 get_world_2d().get_navigation_map()
获取。
默认的 3D 导航地图 RID 可以从继承自 Node3D 的任何 Node 的 get_world_3d().get_navigation_map()
获取。
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;
}
}
新建导航地图
导航服务器可根据特定游戏的需要创建和支持尽可能多的导航地图。其他导航地图可通过直接使用导航服务器应用程序接口来创建和处理,例如支持不同的避障代理或演员运动类型。
有关使用不同导航地图的示例,请参阅 支持不同角色类型 和 支持不同角色运动。
每个导航地图都会单独同步其导航区块和避障代理的更改队列。未收到更改通知的导航地图几乎不会消耗任何处理时间。导航区块和避障代理只能是单个导航地图的一部分,但它们可以随时切换所属地图。
备注
导航地图切换只有在下一次同步导航服务器后才会生效。
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);
}
}
备注
使用 NavigationServer2D API 和 NavigationServer3D API 创建的导航地图没有任何区别。