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