NavigationObstacle3D
实验性: This class may be changed or removed in future versions.
用于导航的 3D 障碍物,能够影响导航网格的烘焙、约束启用了避障处理的代理的速度。
描述
障碍物需要导航地图和轮廓顶点 vertices 才能够正常工作。轮廓不能交叉或重叠,并且被限制在平面投影内。也就是说,会忽略顶点的 Y 坐标,使用障碍物的全局 Y 坐标位置来放置顶点。投影后,再将该形状沿着 Y 轴挤出障碍物的高度。
障碍物如果启用了 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 和 height 定义形状内的源几何体。
bool avoidance_enabled = true
🔗
如果为 true
,则该障碍物会影响使用代理的避障。
决定该障碍物的避障层的位字段。避障掩码中存在匹配位的代理会躲避该障碍物。
bool carve_navigation_mesh = false
🔗
如果启用,障碍物顶点将雕刻到烘焙的导航网格中,其形状不受额外偏移(例如代理半径)的影响。
它仍会受到烘焙过程的后续后处理的影响,例如边缘和多边形简化。
需要启用 affect_navigation_mesh。
设置 2D 避障所使用的障碍物高度。使用 2D 避障的代理会忽略在其之上或之下的障碍物。
设置该障碍物的避障半径。
bool use_3d_avoidance = false
🔗
如果为 true
,则该障碍物会影响 3D 避障,使用的是代理的障碍物半径 radius。
如果为 false
,则该障碍物会影响 2D 避障,使用的是代理的障碍物顶点 vertices 和障碍物半径 radius。
Vector3 velocity = Vector3(0, 0, 0)
🔗
设置该障碍物的期望速度,这样如果(每帧)一直使用相同的速度移动而不是直接跳到某个位置,那么其他代理就能够更好地预测该障碍物的行为。仅影响该障碍物 radius 的避障。不会影响障碍物的静态顶点。
PackedVector3Array vertices = PackedVector3Array()
🔗
void set_vertices(value: PackedVector3Array)
PackedVector3Array get_vertices()
该障碍物的轮廓顶点。如果这些顶点是按照顺时针顺序缠绕的,那么障碍物就会将其他代理向内推,否则就会向外推。轮廓不能交叉或重叠。如果这些顶点直接跳到了新的位置,那么其他代理可能无法预测这种行为,导致被困在障碍物内。
Note: The returned array is copied and any changes to it will not update the original property value. See PackedVector3Array 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 上的障碍物。
返回这个障碍物在 NavigationServer3D 上的 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
。