如何让MHL的Transporters在路径上无需等待、可相互通行?
让MHL Transporters互相“穿过”的可行方案
1. 调整Transporter的核心导航与碰撞设置
- 针对网络导航场景:打开Transporter属性的导航选项卡,在网络导航设置里取消勾选“等待路径上的其他代理”,让Transporter在单向路径上不会因其他同类代理阻挡而暂停。
- 针对自由空间导航场景:除了将Transporter的尺寸设为极小值(比如
0.01x0.01),还要在“避免碰撞”设置中关闭“避免与其他代理碰撞”选项,同时通过严格的目的地序列维持单向行驶逻辑。
2. 用PML流程块重构移动逻辑
既然已有现成的单向网络,完全可以用PML的MoveByNetwork块替代Transporter的默认导航,实现无阻挡通行:
- 创建普通Agent作为拣选员(无需继承Transporter),通过
MoveByNetwork块指定目标节点。 - 在
MoveByNetwork块的设置中,找到“路径占用”相关选项,选择“不占用路径”,这样多个拣选员可同时在同一段路径上移动,不会互相等待。 - 配合
Sequence块或自定义代码,控制Agent按预设的单向路径序列移动,还原原有拣选路线。
3. 代码覆盖Transporter的默认避让逻辑
如果坚持使用Transporter实体,可通过代码强制关闭其碰撞等待机制:
- 在Transporter的
onBeforeMove事件中添加以下代码:this.setAvoidCollisions(false); this.setAvoidObstacles(false); // 若无需避开静态障碍物可关闭 - 或者在网络路径的
onEnter事件中,允许同一路径容纳多个Agent:((NetworkPath)getCurrentPath()).setAllowMultipleAgents(true);
注意:所有方案都要确保单向行驶逻辑不受破坏,比如通过代码限制Agent只能沿指定方向进入路径,避免出现逆向行驶的逻辑冲突。
内容的提问来源于stack exchange,提问作者Shingston
相关产品推荐
相关产品推荐

