在追踪算法三中已经提到了它的缺陷之处:到达目标点的时候并不会马上停下来,而是不停的来回穿梭在目标点。这一篇其实就是第三篇优化这个缺陷的算法。它的效果图如图所示:
它的核心算法代码如下:
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 - 凯尔八阿哥,转载此文目的在于传递更多信息,版权归原作者所有。