无法弄清楚如何启动已保存的协程变量

问题描述 投票:0回答:1

我的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”吗?我通过谷歌搜索找不到解决方案。

c# unity-game-engine variables coroutine ienumerator
1个回答
0
投票

编辑和解决方案:-------------------------------------------------------- --------

我的一个朋友帮了我,所以问题是试图用字符串调用协程。

我改变了:“协程lastCoroutine = null;”到:“私有 IEnumerator lastCoroutine = null;”

我可以用“lastCoroutine = MoveToResource();”来存储它我可以简单地使用“StartCoroutine(lastCoroutine);”重新启动它

顺便提一下:在我的代码示例中“lastCoroutine = StartCoroutine(MoveToResource());”启动了协程,因为有人指出我剥离了太多:D

© www.soinside.com 2019 - 2024. All rights reserved.