Unity 5.0.1 Пълно спиране на Coroutine

Добре, така че се натъквам на лек проблем, по същество имам Coroutine, която съдържа for-цикъл. Мога успешно да извикам методите StopCoroutine и StartCoroutine, но разбира се, това просто поставя на пауза и връща на пауза Coroutine. Има ли начин наистина да го спрете и рестартирате? Крайната ми цел тук е да мога да стартирам Coroutine, да я затворя по преценка на потребителя и да я рестартирам отначало по всяко време, също по преценка на потребителя. Това постижимо ли е? Благодаря.


person zfollette    schedule 26.04.2015    source източник


Отговори (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);
        }
    }
}
person Max Yankov    schedule 26.04.2015
comment
Благодаря! В крайна сметка стигнах до подобно заключение. - person zfollette; 26.04.2015