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...
NavigationObstacle2D¶
实验性: This class may be changed or removed in future versions.
继承: Node2D < CanvasItem < Node < Object
用于导航的 2D 障碍物,能够影响导航网格的烘焙、约束启用了避障处理的代理的速度。
描述¶
障碍物需要导航地图和轮廓顶点 vertices 才能够正常工作。轮廓不能交叉或重叠。
障碍物如果启用了 affect_navigation_mesh,就会影响导航网格的烘焙过程。障碍物并不会添加可行走的几何体,而是负责弃置形状内的其他来源几何体。可用于防止导航网格出现在不需要的位置。如果启用了 carve_navigation_mesh,烘焙形状不会受到导航网格烘焙偏移量的影响,例如代理的半径。
障碍物如果启用了 avoidance_enabled,就能够约束启用了避障处理的代理的避障速度。如果障碍物顶点使用顺时针缠绕顺序,则障碍物会将避障代理推进其内部,否则为推出。使用顶点和避障的障碍物可以瞬移到新的位置,但是不应该每一帧都移动,因为每次更改都需要重新构建避障地图。
教程¶
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
方法¶
get_avoidance_layer_value(layer_number: int) const |
|
get_navigation_map() const |
|
get_rid() const |
|
void |
set_avoidance_layer_value(layer_number: int, value: bool) |
void |
set_navigation_map(navigation_map: RID) |
属性说明¶
bool affect_navigation_mesh = false
🔗
如果启用并在导航网格烘焙过程中解析,则障碍物将丢弃其 vertices 定义形状内的源几何体。
bool avoidance_enabled = true
🔗
如果为 true
,则该障碍物会影响使用代理的避障。
决定该障碍物的避障层的位字段。避障掩码中存在匹配位的代理会躲避该障碍物。
bool carve_navigation_mesh = false
🔗
如果启用,障碍物顶点将雕刻到烘焙的导航网格中,其形状不受额外偏移(例如代理半径)的影响。
它仍会受到烘焙过程的后续后处理的影响,例如边缘和多边形简化。
需要启用 affect_navigation_mesh。
设置该障碍物的避障半径。
Vector2 velocity = Vector2(0, 0)
🔗
设置该障碍物的期望速度,这样如果(每帧)一直使用相同的速度移动而不是直接跳到某个位置,那么其他代理就能够更好地预测该障碍物的行为。仅影响该障碍物 radius 的避障。不会影响障碍物的静态顶点。
PackedVector2Array vertices = PackedVector2Array()
🔗
void set_vertices(value: PackedVector2Array)
PackedVector2Array get_vertices()
该障碍物的轮廓顶点。如果这些顶点是按照顺时针顺序缠绕的,那么障碍物就会将其他代理向内推,否则就会向外推。轮廓不能交叉或重叠。如果这些顶点直接跳到了新的位置,那么其他代理可能无法预测这种行为,导致被困在障碍物内。
Note: The returned array is copied and any changes to it will not update the original property value. See PackedVector2Array for more details.
方法说明¶
bool get_avoidance_layer_value(layer_number: int) const 🔗
返回 avoidance_layers 位掩码中指定的层是否启用,给定的 layer_number
应在 1 和 32 之间。
RID get_navigation_map() const 🔗
返回该 NavigationObstacle 节点的导航地图的 RID。该函数始终返回在 NavigationObstacle 节点上设置的地图,而不是 NavigationServer 上抽象障碍物所使用的地图。如果该障碍物地图使用 NavigationServer API 直接更改,则该 NavigationObstacle 节点将不会察觉该地图的更改。请使用 set_navigation_map 更改 NavigationObstacle 的导航地图,也会更新 NavigationServer 上的障碍物。
返回这个障碍物在 NavigationServer2D 上的 RID。
void set_avoidance_layer_value(layer_number: int, value: bool) 🔗
根据 value
启用或禁用 avoidance_layers 位掩码中指定的层,给定的 layer_number
应在 1 和 32 之间。
void set_navigation_map(navigation_map: RID) 🔗
设置该 NavigationObstacle 节点应使用的导航地图的 RID,并会更新 NavigationServer 上的 obstacle
。