A *寻路AI对象移向移动目标Unity

时间:2018-02-01 07:46:30

标签: c# a-star

我正在尝试制作一个AI对象来追逐我的播放器。播放器由用户控制。

当目标处于不移动的固定位置时,这是我到目前为止的AI代码。如何更改它以使我的AI对象追逐我的播放器?

<script>
$(document).ready(function(){
  $("#time").on('change', function(){
    $("#day").val() == $("#time").val().attr('day');
   })
})
</script>

1 个答案:

答案 0 :(得分:0)

您需要在更新中重新计算路线,就像您在评论中所建议的那样:

public void Update() 
{ 
    GetNewPath(); 
}

但是,如果有很多可能的搜索路径,这可能会给您的计算机带来很大的负担。 我建议你调用一个不经常更新的函数。以下是每秒重新计算一次路径的示例:

private const float _tickInterval = 1f 

public void Start()
{
    // your code
    // ...

    StartCoroutine(AiTick);
}

public IEnumerator AiTick();
{
    while(true)
    {
        seeker.GetNewPath(); 
        yield return new WaitForSeconds(_tickInterval);
    }
}

public void OnDestroy()
{
    StopAllCoroutines();
}

在此示例中,您不需要Update功能。相反,我们使用 coroutine 。协同程序是可以使用yield关键字停止执行并稍后恢复的函数。有关详细信息,请参阅doc

这里的工作原理如下:

  • public IEnumerator AiTick();是协程。可以使用yield

  • 延迟执行
  • Start我们称之为“StartCoroutine(AiTick);&#39;”,这与调用AiTick()函数相同,但允许将其用作协程

  • AiTick功能会调用seeker.GetNewPath(),然后停止_tickInterval。当它恢复后者时,如果将到达循环结束,则在开始时再返回并再次调用seeker.GetNewPath,替换Update函数,但每_tickInterval秒仅执行一次

  • OnDestroy我们停止了协程,因为它永远不会退出。我们不需要这样做,因为无论如何物体都被摧毁了,但这是更清洁的