Unity 5.0.1 Полная остановка сопрограммы

Итак, я столкнулся с небольшой проблемой, в основном, у меня есть сопрограмма, содержащая цикл for. Я могу успешно вызывать методы StopCoroutine и StartCoroutine, но, конечно, это просто приостанавливает и возобновляет выполнение 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