Страница 1 из 1

Coroutine в Editor скриптах

СообщениеДобавлено: 15 июл 2014, 19:37
Diab10
Целый день промучался, и нашёл решение, может кому пригодится. :-B

Вот в чём суть:
Мне нужно было запускать один код и в режиме Play и в редакторе.
Всё бы ничего, но этот код напичкан кучей Coroutine.
Оказалось, что Coroutine в редакторе не работают(а точнее, они работают до первого yield - после чего выполнение корутины останавливается).
Уже хотел дублировать весь код для использования в редакторе, но без использования корутин, но тут нашёл отличное решение!

Заменяем это:
Синтаксис:
Используется csharp
    StartCoroutine(Build());

На это:
Синтаксис:
Используется csharp
    IEnumerator e = Build();
    while (e.MoveNext());

Профит :ymparty:

Ссылка на источник: http://chicounity3d.wordpress.com/2014/ ... he-editor/

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 16 июл 2014, 02:21
gnoblin
нормич, пасиба )

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 16 июл 2014, 07:41
IDoNotExist
Diab10 писал(а):Заменяем это:
Синтаксис:
Используется csharp
    StartCoroutine(Build());

На это:
Синтаксис:
Используется csharp
    IEnumerator e = Build();
    while (e.MoveNext());


Так получается же, что если просто заменить первый вариант на второй, то короутина выполнится мгновенно, получается что и смысл короутины теряется и её можно заменить простой функцией, e.MoveNext() лучше вызывать в апдейте.

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 16 июл 2014, 08:48
Diab10
IDoNotExist писал(а):Так получается же, что если просто заменить первый вариант на второй, то короутина выполнится мгновенно, получается что и смысл короутины теряется и её можно заменить простой функцией, e.MoveNext() лучше вызывать в апдейте.


Да, можно и в апдейте или других ф-ях, но мне и так нормально, т.к. у меня происходит генерация - в редакторе можно мгновенно это сделать(лаг не страшен). Главное, что не пришлось переписывать кучу кода и делать из него 2 версии функции - для редактора и для play режима :)

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 16 июл 2014, 10:02
2rusbekov
как можно в эдиторе использовать WWW?
Ну в смысле, у меня отправляются бандлы сразу на серв, и на ожидание тупо while стоит, и пока файлы загружаются эдитор мертвый, а хотелось бы избежать этого.
Есть варианты?

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 16 июл 2014, 13:13
gnoblin
неодроп постил свой вариант эдитор корутин

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 16 июл 2014, 15:07
DbIMok

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 16 июл 2014, 17:38
2rusbekov
gnoblin писал(а):неодроп постил свой вариант эдитор корутин

Спасибо, нашел. Теперь бандлы грузятся с прогрессбаром))

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 02 дек 2014, 12:56
Diab10
2rusbekov писал(а):
gnoblin писал(а):неодроп постил свой вариант эдитор корутин

Спасибо, нашел. Теперь бандлы грузятся с прогрессбаром))


Где нашли? Не найду :(

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 02 дек 2014, 13:59
seaman
EditorApplication.update

Re: Coroutine в Editor скриптах

СообщениеДобавлено: 07 дек 2015, 19:25
ilka
Разбиваем процесс во времени - аналог корутины.
Синтаксис:
Используется csharp
void GenerateSomething() {
 try {
  foreach(s s in GenerateRoutine(1000)) {
   EditorUtility.DisplayProgressBar("Progress: ", s.content, s.time);
  }
 } finally {
  EditorUtility.ClearProgressBar();
 }
}

IEnumerable<s> GenerateRoutine(int count) {
 for(int i = 0; i < count; i++) {
  float time = ((float)i  + 1) / (float)count;
  yield return new s(time, (time * 100).ToString() + "% done");
 }
}

struct s {
 
 public float time;
 public string content;

 public s(float time, string content) {
  this.time = time;
  this.content = content;
 }

}