前段时间使用官方的例子来实现小车寻路,虽然具体功能实现了,但是有一些问题,比如小车在点与点的转换时转向十分突兀,而且需要很多点才能实现一个转弯,而且很容易与其他物体发生碰撞。且无法实现动态避障。
在这些问题的基础上,我不得不重新思考寻路问题,后来还是使用unity自带模块navigation寻路模块以及射线映射基本上解决了所有问题,具体思路是:
首先,选择路径进行烘培,烘焙的路径将作为可行区域。设置一个目标点,和前面思路一样,设置多个路径点切换。不同的是,小车会借助navigation模块自动在可行区域寻找最优路线,并借助射线来平滑计算需要调整的角度,当然需要在转弯处设置制动带,这样不会因为小车行驶速度过快发生事故,这样大大减少我们前面要设置很多很多个点才能实现转弯功能。这样就可以实现自动寻路了。
其次,我们要实现避开行人,我使用的是射线检测的方式,车辆前方添加一组扇形区域的射线,它会碰撞到物体时给你反馈,当是people时,计算距离,当小于多少时自动刹车待行人通过继续行走,若一段时间还是无法通过,则选择绕行其他可行区域。还需要实现红路灯的功能,这个就比较简单,利用navigation的动态壁障就可以实现,类似机关。给某段路径添加障碍物的组件,并使用脚本使它在一段时间内setActive,这样就可以达到效果。
unity中的AI可以简单可以复杂,对于相对目标行为的靠近、离开、抵达、追逐、逃避、随机徘徊等,对于AI角色对游戏世界的感知,自主决策(有限状态机),复杂决策(行为树)等,我会继续研究。
我在自己搭建路径的时候,由于是网上找的一节一节的道路,run的时候在道路接口处发生明显的抖动,这个bug需要研究研究。
具体请参考GitHub中AIcar2部分。