Итак, я столкнулся с небольшой проблемой, в основном, у меня есть сопрограмма, содержащая цикл for. Я могу успешно вызывать методы StopCoroutine и StartCoroutine, но, конечно, это просто приостанавливает и возобновляет выполнение Coroutine. Есть ли способ остановить его и перезапустить? Моя конечная цель здесь состоит в том, чтобы иметь возможность запускать сопрограмму, завершать ее по усмотрению пользователя и перезапускать ее с самого начала в любое время, также по усмотрению пользователя. Это выполнимо? Спасибо.
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);
}
}
}
person
Max Yankov
schedule
26.04.2015
Спасибо! В итоге я пришел к такому же выводу.
- person zfollette; 26.04.2015