Unity 5.0.1完全停止协同程序

时间:2015-04-26 01:32:35

标签: unity3d restart coroutine

好吧所以我遇到了一个小问题,基本上,我有一个包含for循环的Coroutine。我可以成功调用StopCoroutine和StartCoroutine方法,但当然,这只是暂停和取消使用Coroutine。有没有办法实际停止并重新启动它?我的最终目标是能够启动一个Coroutine,根据用户的判断终止它,并在任何时候从用户开始重新启动它,也可以由用户自行决定。这是可以实现的吗?感谢。

1 个答案:

答案 0 :(得分:1)

To"倒带"协程,只需使用相同的参数再次调用协同程序。如果要保存这些参数,可以使用闭包:

public class CoroutineClosureExample : MonoBehaviour
{
    private System.Func<IEnumerator> CreateCoroutineFactory(int someInt, float someFloat)
    {
        return () => CoroutineYouWant(someInt, someFloat);
    }

    private IEnumerator CoroutineYouWant(int someInt, float someFloat)
    {
        for(int i = 0; i < someInt; i++)
        {
            yield return new WaitForEndOfFrame();
        }
    }

    private System.Func<IEnumerator> m_CurrentCoroutineFactory;
    private IEnumerator m_CurrentCoroutine;

    public void SetCoroutineParameters(int someInt, float someFloat)
    {
        m_CurrentCoroutineFactory = CreateCoroutineFactory(someInt, someFloat);
    }

    public void RestartCurrentCoroutine()
    {
        if (m_CurrentCoroutine != null)
        {
            StopCoroutine(m_CurrentCoroutine);
            m_CurrentCoroutine = null;
        }
        if (m_CurrentCoroutineFactory != null)
        {
            m_CurrentCoroutine = m_CurrentCoroutineFactory();
            StartCoroutine(m_CurrentCoroutine);
        }
    }
}