Unreal Engine:Detour Crowd无法适配不同高度Nav Links的问题求助
问题描述
拥有两个不同高度的导航平面,通过Nav Link连接。所有Pawn均配备FloatingPawnMovementComponent:
- 使用普通AIController时,Pawn可沿Nav Link从起点攀爬至更高平面;
- 使用DetourCrowdAIController时,Pawn到达Nav Link后无垂直速度,仅能在(X,Y)平面移动,无法攀爬至高处,会碰撞到Nav Link终点下方的墙体。
Pawn蓝图配置一致,包含FloatingPawnMovementComponent的标准设置。
问题原因
- DetourCrowdAIController默认采用2.5D寻路逻辑,核心寻路计算优先忽略Z轴高度差,不会自动将Nav Link的垂直高度变化转化为Pawn的Z轴移动指令;
- 内置的Detour Crowd移动系统在处理Nav Link时,仅传递(X,Y)坐标的移动目标,未同步传递终点的Z坐标,导致FloatingPawnMovementComponent未收到垂直方向的移动输入;
- 若项目未开启Detour Crowd的3D寻路支持,系统会强制将Agent限制在XY平面移动,直接忽略Nav Link的垂直过渡设置。
解决方法
1. 开启Detour Crowd的3D寻路支持
- 打开项目设置(Project Settings),导航到Navigation > Detour Crowd;
- 勾选
bUse3DPathfinding选项(UE5版本),或对应版本的“启用3D寻路”开关,让系统识别并处理Z轴高度变化。
2. 调整Nav Link与导航代理设置
- 选中场景中的Nav Link,在细节面板确保:
- 勾选
bAllowVerticalMovement,明确允许垂直方向的过渡; Link Direction设置为正确的通行方向(双向或单向);
- 勾选
- 在Pawn的Nav Agent Properties中,确保
Agent Height和Radius参数与Pawn实际尺寸匹配,避免导航系统因碰撞判断过滤垂直路径。
3. 修正FloatingPawnMovementComponent配置
- 打开Pawn的FloatingPawnMovementComponent细节面板:
- 将
bConstrainToPlane设为false,取消XY平面移动限制; - 确保
Max Speed和Acceleration的数值足够支持垂直方向的移动(比如设置Z轴的加速度与XY轴一致); - 关闭
bAllowPhysicsRotation(若无需物理驱动旋转),避免旋转逻辑干扰垂直移动。
- 将
4. 自定义DetourCrowdAIController的移动逻辑
- 重写DetourCrowdAIController的路径跟随逻辑:
- 在蓝图中监听
OnMoveToCompleted事件,当检测到当前路径包含Nav Link时,获取Nav Link终点的Z坐标; - 通过
Add Movement Input节点,向Z轴方向添加对应输入,或直接设置Pawn的Velocity的Z分量,驱动Pawn向目标高度移动; - 示例逻辑:当Pawn距离Nav Link起点小于设定阈值时,计算终点与当前位置的Z轴差值,设置垂直移动速度为
差值 / 预计移动时间,确保Pawn能到达目标高度。
- 在蓝图中监听
内容的提问来源于stack exchange,提问作者Valar Morghulis
相关产品推荐
相关产品推荐

