使用导航区块

NavigationRegion 即导航区块,是对 NavigationServer 的导航地图中某个区块的可视化 Node 表示。每个 NavigationRegion 节点中都存放着导航网格数据资源。

2D 和 3D 版本分别为 NavigationRegion2DNavigationRegion3D

各个导航区域将其二维导航多边形或三维导航网格资源数据上传到导航服务器。导航服务器地图会将这些信息转化为用于寻路的组合导航地图。

要使用场景树创建导航区域,请在场景中添加一个导航区块2D``NavigationRegion2D`` 或导航区块3D``NavigationRegion3D`` 节点。所有区域都需要导航网格资源才能运行。请参阅使用导航网格导航 使用导航网格 了解如何创建和应用导航网格。

导航区块会自动将全局变换``global_transform``推送到导航服务器上的区块,使其适用于移动平台。当各个区域的导航网格足够接近时,导航服务器会尝试将它们连接起来。详情请参见连接导航网格 连接导航网格。要连接任意距离的导航区块,请参阅 使用导航链接 doc_navigation_using_navigationlinks`了解如何创建和使用导航链接``NavigationLinks`。

警告

改变导航区块节点的变换部件(transform)会更新导航服务器上的区块位置,但改变缩放比例则不会。导航网格资源没有缩放比例,因此当来源几何体缩放比例改变时需要完全更新。

区块可以启用/禁用,如果禁用,则不会参与寻路查询。

备注

启用/禁用区块时,现有路径不会自动更新。

新建导航区块

新的导航区块节点会在2D/3D 尺寸的默认世界导航地图上自动注册。

然后就可以通过 NavigationRegion 节点的 get_rid() 获取区块 RID。

2D GDScript3D GDScript

  1. extends NavigationRegion2D
  2. var navigationserver_region_rid: RID = get_rid()
  1. extends NavigationRegion3D
  2. var navigationserver_region_rid: RID = get_rid()

还可以使用导航服务器接口创建新区块,并将其添加到任何现有地图中。

如果直接使用导航服务器接口创建区块,则需要手动为其分配导航地图。

2D GDScript3D GDScript

  1. extends Node2D
  2. func _ready() -> void:
  3. var new_region_rid: RID = NavigationServer2D.region_create()
  4. var default_map_rid: RID = get_world_2d().get_navigation_map()
  5. NavigationServer2D.region_set_map(new_region_rid, default_map_rid)
  1. extends Node3D
  2. func _ready() -> void:
  3. var new_region_rid: RID = NavigationServer3D.region_create()
  4. var default_map_rid: RID = get_world_3d().get_navigation_map()
  5. NavigationServer3D.region_set_map(new_region_rid, default_map_rid)

备注

导航区块只能分配给一个导航地图。如果将现有区块分配到新的导航地图,它就不属于旧地图了。