2015-04-26 45 views
1

好吧,我遇到了一個小問題,基本上,我有一個包含for循環的協程。我可以成功地調用StopCoroutine和StartCoroutine方法,但當然,這只是暫停和取消暫停協程。有沒有辦法實際阻止它並重新啓動它?我的最終目標是能夠啓動一個協程,根據用戶的判斷殺死它,並隨時從用戶的判斷開始重新啓動它。這是可以實現的嗎?謝謝。Unity 5.0.1完全停止協程

回答

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); 
     } 
    } 
} 
+0

謝謝!我最終得出了類似的結論。 – zfollette