在追踪算法三中已经提到了它的缺陷之处:到达目标点的时候并不会马上停下来,而是不停的来回穿梭在目标点。这一篇其实就是第三篇优化这个缺陷的算法。它的效果图如图所示:

它的核心算法代码如下:
Vector2 Track_AIAdvancedArrive()
{
Vector2 toTarget = AimTarget.transform.position - pObject.transform.position;//这里我偷懒了,最好还是采用明确的转换到2维向量
float dist = PointDistance_2D(toTarget.x, toTarget.y);
//让它大于10而不是0是为了在导弹到达目标位置时候停止下来不抖动
if (dist > 10)
{
Vector2 DesiredVelocity = toTarget / DecelerationTweaker;
return DesiredVelocity - pObject.Velocity;
}
return Vector2.zero;
}
多次测试得到代码里面的dist在大于10的时候是最好的,太小了比如说1回使得抖动太大,太大了回根本到不了目标点。在目标很远的时候这个算法和算法三是一样的,只有当接近目标的时候时,才有减速的效果。
完整的代码如下:
本文转自:CSDN - 凯尔八阿哥,转载此文目的在于传递更多信息,版权归原作者所有。





