Unity人工智能学习—确定性AI算法之追踪算法四

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


它的核心算法代码如下:

  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 - 凯尔八阿哥,转载此文目的在于传递更多信息,版权归原作者所有。

推荐阅读