Coroutine в Editor скриптах

Coroutine в Editor скриптах

Сообщение Diab10 15 июл 2014, 19:37

Целый день промучался, и нашёл решение, может кому пригодится. :-B

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

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

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

Профит :ymparty:

Ссылка на источник: http://chicounity3d.wordpress.com/2014/ ... he-editor/
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

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

Сообщение gnoblin 16 июл 2014, 02:21

нормич, пасиба )
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

Сообщение IDoNotExist 16 июл 2014, 07:41

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

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


Так получается же, что если просто заменить первый вариант на второй, то короутина выполнится мгновенно, получается что и смысл короутины теряется и её можно заменить простой функцией, e.MoveNext() лучше вызывать в апдейте.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

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

Сообщение Diab10 16 июл 2014, 08:48

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


Да, можно и в апдейте или других ф-ях, но мне и так нормально, т.к. у меня происходит генерация - в редакторе можно мгновенно это сделать(лаг не страшен). Главное, что не пришлось переписывать кучу кода и делать из него 2 версии функции - для редактора и для play режима :)
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

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

Сообщение 2rusbekov 16 июл 2014, 10:02

как можно в эдиторе использовать WWW?
Ну в смысле, у меня отправляются бандлы сразу на серв, и на ожидание тупо while стоит, и пока файлы загружаются эдитор мертвый, а хотелось бы избежать этого.
Есть варианты?
Still alive...
Аватара пользователя
2rusbekov
Адепт
 
Сообщения: 1409
Зарегистрирован: 06 апр 2012, 12:57
Откуда: Бишкек

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

Сообщение gnoblin 16 июл 2014, 13:13

неодроп постил свой вариант эдитор корутин
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

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

правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

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

Сообщение 2rusbekov 16 июл 2014, 17:38

gnoblin писал(а):неодроп постил свой вариант эдитор корутин

Спасибо, нашел. Теперь бандлы грузятся с прогрессбаром))
Still alive...
Аватара пользователя
2rusbekov
Адепт
 
Сообщения: 1409
Зарегистрирован: 06 апр 2012, 12:57
Откуда: Бишкек

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

Сообщение Diab10 02 дек 2014, 12:56

2rusbekov писал(а):
gnoblin писал(а):неодроп постил свой вариант эдитор корутин

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


Где нашли? Не найду :(
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

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

Сообщение seaman 02 дек 2014, 13:59

EditorApplication.update
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение ilka 07 дек 2015, 19:25

Разбиваем процесс во времени - аналог корутины.
Синтаксис:
Используется 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;
 }

}
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32


Вернуться в Tips & Tricks

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2