Копеес, сколько читал про корутины, когда сталкивался с необходимостью задержки, так и не мог до конца понять, как это делается. Спасибо) P.S. возможно кто то запустил корутину для моего развития :)
Корутины выполняются не параллельно, а асинхронно, важно не путать. Другими словами, когда вы вызываете корутину, она передается в главнй поток юнити и там обрабатывается. То есть, когда вы доходите до yield инструкции, мы говорим Юнити, что продолжи свою работу, пока планировщик не продолжит выполнять код в этом методе
@@unityk555 комментарий не про то, что корутины лучше инвоков. Комментарий про то, что в корутинах есть перегрузка, которая позволяет непосредственно сослаться на вызываемый метод (вместо обращения по имени). И если это критично, то корутина, имхо, предпочтительней.
Тогда да) я лично уже давно не использую ни инвоки и не карутины, програмирую используя асинхронные методы и uniRx задержки, о них речь пойдет во втором уроке в среду.
Я ещё вспомнил про thread. Sleep(). Загуглил "будет ли это останавливать всю игру/приложение"? Оказалось да, лучше этим не пользоваться. Так как юнити билд работает в одном потоке. Если вы конечно не создаёт е свои потоки.
Под предыдущим видео писал комментарий схожего содержания. Немного поэкспериментировал и сделал отсрочку с помощью класса System.Timers.Timer. В нем событие срабатывания вызывается в отдельном потоке. А я пытался удалить объект со сцены. Из простого - объект не удалился. Из внезапного - таймер продолжил срабатывать даже после остановки игры. Ну, нажал стоп, перешёл в редактор, а метод всё вызывается и вызывается. И как его остановить, хз )))
Метод о котором вы написали это уже многопоточность, я намеренно не касаюсь этой темы в этом ролике. Это уже не просто задержки, а манипуляции потоками. Но во второй части урока будет асинхронность, например.
Отличное видео, правда, первая и самая простая задержка - это наверное реализация таймера. Ну типа заводим переменную, в апдейте плюсуем Time.deltaTime. Также имеем список ордеров, кт можно добавлять таймеру через интерфейс. В ордере Action и время через которое он должен быть запущен. Через каждый Update таймер обновляет себя и смотрит истекшие ордеры. Если какой-то ордер истёк, закрываем его, убираем из списка и вызываем action.Invoke. Вот тебе пятый способ сделать задержку =)
Ну способ с таймером не всегда удобен, зачем делать свой таймер если его можно запустить с Invoke сразу? Но иногда я использую и описанный выше подход. А вообще способов сделать задержку хватает, начиная с простого Invoke и заканчивая многопоточностью, так что берите те что вам по душе))
@@unityk555 Да он вообще не удобен, просто в некоторых системах иного способа из коробки нет. Например, если попытаться совокупить Unity и Arduino. Кстати, тема авейт-асисек не раскрыта. Предлагаю взять какую-нибудь задачку, кт гарантировано положит поток, например, поиск простых чисел в диапазоне и показать, как её решить, не вешая Unity Thread. Так же, думаю, будет интересно как возвращать пакеты из UDP-сокета в основной поток.
Ну по async/await позже сниму отдельный урок. По всяконо рода потокам тоже можно будет записать. Сейча уже план сформирован. Осталось только найти свободное время для записи))
Как получается IEnumerator сделать private если это общедоступный метод,даже редактор подсвечивает "не допустимо для использования",а куда ни глянь,у них у всех private?
Спасибо вам огромное, пусть и не с первого раза, но благодаря вам я разобрался как работать с задержкой или карутиной, добра вам!
нигде до этого про инвоук не слышал, спасибо!
Повторение - мать учения! Классный контент! Вчера наткнулся на канал и не подписаться не смог. Премного благодарен за труд!
Спасибо за подписку. Рад что контент вам понравился, впереди еще много интересного.
Всё по делу , лучшее обьяснение корутин , молодец )
Спасибо, стараюсь)
Копеес, сколько читал про корутины, когда сталкивался с необходимостью задержки, так и не мог до конца понять, как это делается. Спасибо)
P.S. возможно кто то запустил корутину для моего развития :)
Автор видоса красавчик, лаконично, грамотно без спама 👍👍👍👍👍👍ЛАЙК🥇🏆♥
Спасибо вам большое за ваши уроки!!
Большое, человеческое спасибо!!!
Корутины выполняются не параллельно, а асинхронно, важно не путать. Другими словами, когда вы вызываете корутину, она передается в главнй поток юнити и там обрабатывается. То есть, когда вы доходите до yield инструкции, мы говорим Юнити, что продолжи свою работу, пока планировщик не продолжит выполнять код в этом методе
Спасибо за видео!!!
Эх досмотрел до второ минуты. Для моей задачи инвока хватило😂
Спасибо за видео!
Я бы ещё добавил, что лучше использовать name of() вместо стрингового названия метода:)
Либо использовать корутины вместо инвок
Да вы правы, если есть возможность захешировать стрингу, то лучше ее хешировать.
@@andrey_aka_skif видео не про то что лучше, а про разные способы задержек. Я просто показываю какие виды бывают и Invoke тоже имеет место быть.
@@unityk555 комментарий не про то, что корутины лучше инвоков. Комментарий про то, что в корутинах есть перегрузка, которая позволяет непосредственно сослаться на вызываемый метод (вместо обращения по имени). И если это критично, то корутина, имхо, предпочтительней.
Тогда да) я лично уже давно не использую ни инвоки и не карутины, програмирую используя асинхронные методы и uniRx задержки, о них речь пойдет во втором уроке в среду.
Второй день бошку ломаю, почему не могу остановить корутину. Оказалось надо в переменную её поместить, спасибо большое!!
Да не за что, остановка корутины штука не очевидная. Сам в свое время сидел с ней.
А зачем вообще останавливать то? Она взяла, выполнила свой код и всё, закончилась, нет? Разве не так?
спасибо за видео!
Я ещё вспомнил про thread. Sleep(). Загуглил "будет ли это останавливать всю игру/приложение"? Оказалось да, лучше этим не пользоваться. Так как юнити билд работает в одном потоке. Если вы конечно не создаёт е свои потоки.
Под предыдущим видео писал комментарий схожего содержания. Немного поэкспериментировал и сделал отсрочку с помощью класса System.Timers.Timer. В нем событие срабатывания вызывается в отдельном потоке. А я пытался удалить объект со сцены. Из простого - объект не удалился. Из внезапного - таймер продолжил срабатывать даже после остановки игры. Ну, нажал стоп, перешёл в редактор, а метод всё вызывается и вызывается. И как его остановить, хз )))
Метод о котором вы написали это уже многопоточность, я намеренно не касаюсь этой темы в этом ролике. Это уже не просто задержки, а манипуляции потоками. Но во второй части урока будет асинхронность, например.
@@andrey_aka_skif интересно)))
Отличное видео, правда, первая и самая простая задержка - это наверное реализация таймера.
Ну типа заводим переменную, в апдейте плюсуем Time.deltaTime. Также имеем список ордеров, кт можно добавлять таймеру через интерфейс.
В ордере Action и время через которое он должен быть запущен. Через каждый Update таймер обновляет себя и смотрит истекшие ордеры. Если какой-то ордер истёк, закрываем его, убираем из списка и вызываем action.Invoke.
Вот тебе пятый способ сделать задержку =)
Ну способ с таймером не всегда удобен, зачем делать свой таймер если его можно запустить с Invoke сразу? Но иногда я использую и описанный выше подход. А вообще способов сделать задержку хватает, начиная с простого Invoke и заканчивая многопоточностью, так что берите те что вам по душе))
@@unityk555 Да он вообще не удобен, просто в некоторых системах иного способа из коробки нет. Например, если попытаться совокупить Unity и Arduino.
Кстати, тема авейт-асисек не раскрыта. Предлагаю взять какую-нибудь задачку, кт гарантировано положит поток, например, поиск простых чисел в диапазоне и показать, как её решить, не вешая Unity Thread.
Так же, думаю, будет интересно как возвращать пакеты из UDP-сокета в основной поток.
Ну по async/await позже сниму отдельный урок. По всяконо рода потокам тоже можно будет записать. Сейча уже план сформирован. Осталось только найти свободное время для записи))
5 задержка - это задержка в развитии, ведь большинство пишущих людей на юнити с ней сталкиваются!
6 задержка - это задержка в развитии, ведь большинство людей на росии с ней сталкиваются
@@adzhevzhik хохол момент)
Как получается IEnumerator сделать private если это общедоступный метод,даже редактор подсвечивает "не допустимо для использования",а куда ни глянь,у них у всех private?
IEnumerator это не метод в данном случае. Это тип возращаемого значения.
Пятая это задержка в развитии, если долго пытаться разобраться в коде новичку.
@@darkscorp4415 )) все с опытом
E осень помогло для ии
Больше всего корутины в морковке.
))))
Timer
Спасибо Ато разобраться немогу
Настолько знаю - Invoke юзать это плохой практикой считается
Тоже где-то это слышал, но не углублялся, так как никогда его не использовал))
@@unityk555 Invoke создает неотслеживаемую связь и часто рушит архитектуру