我正在尝试制作一个AI对象来追逐我的播放器。播放器由用户控制。
当目标处于不移动的固定位置时,这是我到目前为止的AI代码。如何更改它以使我的AI对象追逐我的播放器?
<script>
$(document).ready(function(){
$("#time").on('change', function(){
$("#day").val() == $("#time").val().attr('day');
})
})
</script>
答案 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
我们停止了协程,因为它永远不会退出。我们不需要这样做,因为无论如何物体都被摧毁了,但这是更清洁的