跳转到主要内容

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

demi 提交于

在追踪算法三中已经提到了它的缺陷之处:到达目标点的时候并不会马上停下来,而是不停的来回穿梭在目标点。这一篇其实就是第三篇优化这个缺陷的算法。它的效果图如图所示:
<center><img width="600" src="http://imgtec.eetrend.com/files/2019-07/%E5%8D%9A%E5%AE%A2/100044270-75…; alt=""></center><br>

它的核心算法代码如下:
<pre> Vector2 Track_AIAdvancedArrive()
{
Vector2 toTarget = AimTarget.transform.position - pObject.transform.position;//这里我偷懒了,最好还是采用明确的转换到2维向量
float dist = PointDistance_2D(toTarget.x, toTarget.y);
//让它大于10而不是0是为了在导弹到达目标位置时候停止下来不抖动
if (dist &gt; 10)
{
Vector2 DesiredVelocity = toTarget / DecelerationTweaker;
return DesiredVelocity - pObject.Velocity;
}
return Vector2.zero;
}
</pre>

多次测试得到代码里面的dist在大于10的时候是最好的,太小了比如说1回使得抖动太大,太大了回根本到不了目标点。在目标很远的时候这个算法和算法三是一样的,只有当接近目标的时候时,才有减速的效果。

完整的代码如下:
<embed src="http://imgtec.eetrend.com/files/2019-07/%E5%8D%9A%E5%AE%A2/100044270-75…; width="600" height="480" />

本文转自:<a href="https://blog.csdn.net/zhangxiao13627093203/article/details/48997365">CS… - 凯尔八阿哥</a>,转载此文目的在于传递更多信息,版权归原作者所有。