我的AI单元有几个用于不同任务的协程,我希望能够存储最后使用的协程,以便它们可以“暂停”和“继续”,但遇到了一个我无法弄清楚的麻烦。
因此,我给该单元发出命令 MoveToResourceStart(),将 MoveToResource() 保存为 lastCoroutine 并启动它。然后我触发 StopAlly(),停止代理路径并使其查看玩家。当我尝试触发ContinueAlly()来恢复最后一个协程时,它抛出一个错误:“协程'lastCoroutine'无法启动!”
剥离代码:
Coroutine lastCoroutine = null;
protected void StopAlly(Transform player)
{
if (lastCoroutine != null)
{
StopCoroutine(lastCoroutine);
agent.ResetPath();
}
this.transform.LookAt(player.position);
}
protected void ContinueAlly()
{
if (lastCoroutine != null) StartCoroutine("lastCoroutine");
}
protected void MoveToResourceStart()
{
if (lastCoroutine != null) StopCoroutine(lastCoroutine);
lastCoroutine = StartCoroutine(MoveToResource());
}
protected IEnumerator MoveToResource()
{
agent.SetDestination(resource.gameObject.transform.position);
//and a bunch of movement related code, works fine
}
我无法弄清楚我做错了什么,或者我是否试图完全错误地处理这个主题。 有人知道我如何启动“lastCoroutine”吗?我通过谷歌搜索找不到解决方案。
编辑和解决方案:-------------------------------------------------------- --------
我的一个朋友帮了我,所以问题是试图用字符串调用协程。
我改变了:“协程lastCoroutine = null;”到:“私有 IEnumerator lastCoroutine = null;”
我可以用“lastCoroutine = MoveToResource();”来存储它我可以简单地使用“StartCoroutine(lastCoroutine);”重新启动它
顺便提一下:在我的代码示例中“lastCoroutine = StartCoroutine(MoveToResource());”启动了协程,因为有人指出我剥离了太多:D