1
好吧,我遇到了一個小問題,基本上,我有一個包含for循環的協程。我可以成功地調用StopCoroutine和StartCoroutine方法,但當然,這只是暫停和取消暫停協程。有沒有辦法實際阻止它並重新啓動它?我的最終目標是能夠啓動一個協程,根據用戶的判斷殺死它,並隨時從用戶的判斷開始重新啓動它。這是可以實現的嗎?謝謝。Unity 5.0.1完全停止協程
好吧,我遇到了一個小問題,基本上,我有一個包含for循環的協程。我可以成功地調用StopCoroutine和StartCoroutine方法,但當然,這只是暫停和取消暫停協程。有沒有辦法實際阻止它並重新啓動它?我的最終目標是能夠啓動一個協程,根據用戶的判斷殺死它,並隨時從用戶的判斷開始重新啓動它。這是可以實現的嗎?謝謝。Unity 5.0.1完全停止協程
要「倒回」協程,只需再次使用相同的參數調用協程方法即可。如果你想保存這些參數,你可以使用閉包:
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);
}
}
}
謝謝!我最終得出了類似的結論。 – zfollette