1.引言
阅读《Unity Game AI programming 》第6章后,感觉躲避障碍物算法不是很给力。为了研究和学习Unity,自己改良躲避障碍物的算法。当然,代码没有优化,不过没关系,抛砖引玉,记录思想,学习交流。
2.与原书算法相比变化:
1.启用物理引擎,使用速度和力解决问题。而不是使用的角度和位置
2.加入沿着障碍物行走,即使障碍物宽度很大或物体向障碍物前进的速度过快,也不会发生穿墙而过现象。
3.为配合沿着障碍物行走,并且显得更自然,引入三个速度与障碍物的交互分区。
3.分享一下示意源码:
public void AvoidObstacles (ref Vector3 dir)
{
RaycastHit hit;
//Only detect layer 8 (Obstacles)
int layerMask = 1 << 8;
//Check that the vehicle hit with the obstacles within it's minimum distance to avoid
//print (transform.forward);
//障碍物交互区
if (Physics.Raycast (transform.position, rb.velocity, out hit, minimumDistToAvoid, layerMask)) {
alongWall = false;
Vector3 hitNormal = hit.normal;
hitNormal.y = 0.0f; //Don't want to move in Y-Space
disToAvoid = hit.distance;
//[5-minimumDistToAvoid]排斥