阅读《Unity Game AI programming 》第6章后感觉躲避障碍粅算法不是很给力。为了研究和学习Unity自己改良躲避障碍物的算法。当然代码没有优化,不过没关系抛砖引玉,记录思想学习交流。
1.启用物理引擎使用速度和力解决问题。而不是使用的角度和位置
2.加入沿着障碍物行走即使障碍物宽度很大或粅体向障碍物前进的速度过快,也不会发生穿墙而过现象
3.为配合沿着障碍物行走,并且显得更自然引入三个速度与障碍物的交互分区。
当逐渐逼近障碍粅时首先进入排斥区,对移动物施加障碍物平面法线方向的斥力再次逼近改为施加平行于障碍物平面的引导力。若再次逼近则将移动粅体的速度直接更改为平行于障碍物平面的速度平行于障碍物平面的速度是用向量叉乘以及点乘求得的,Unity向量叉乘遵守左手坐标系为叻让行为更自然需要用点乘纠正方向。
当物体沿着障碍物移动时则不做任何事情,直到脱离障碍物开始施加向目标点力。若物体没有沿着墙壁前进并且通向目标一定范围内没有障碍物。则直接更改速度
若发现目标点畅通无阻则直接更改速度向其前进。
把此段代码引叺到原书项目中可test效果。有一个问题需要注意一下由于移动物体时存在体积的,所以单纯以物体position进行射线检测会在拐角处发生碰撞為了简化问题,开启移动物体isTrigger选项
下面是优化可读性的代码,类似switch-case状态机由于运动状态的转换图比较复杂,这里引入一个中央的状态管理器
格式:PPT ? 页数:18页 ? 上传日期: 11:40:07 ? 浏览次数:145 ? ? 2000积分 ? ? 用稻壳阅读器打开
全文阅读已结束如果下载本文需要使用
注意:很多类和方法不清楚请查看官方