Всё про корутины в Unity 3D

Поделиться
HTML-код
  • Опубликовано: 2 янв 2025

Комментарии • 224

  • @LowPolyOne
    @LowPolyOne 4 года назад +165

    Очень долго боялся корутин. Спал со включённым светом, заглядывал под кровать перед сном, чтобы проверить, не сидит ли там какая-нибудь сопрограмма... а потом вырос и эти чудовища превратились в лучших друзей при разработке!
    Спасибо автору за качественный материал без воды!

  • @ВалерийЛысенко-н7к
    @ВалерийЛысенко-н7к 4 года назад +78

    Корутины наше всё. Для меня инфа не новая, но новичкам будет очень полезно. Спасибо за развивающий контент отличного качества. Его на рутюбе очень мало.

  • @gaitavr1992
    @gaitavr1992 4 года назад +79

    Было бы неплохо еще рассказать что такое IEnumerator, moveNext, current и Reset. Так сказать для полноты картины)

    • @zerocode2909
      @zerocode2909 4 года назад +5

      Это нативный C#. Вкратце IEnumerator- интерфейс перечисления. Current - выдать выбранный элемент списка. moveNext - Переключиться на следующий элемент списка. Reset - сбросить "счётчик" (начать перечисление с начала)
      P.S
      Это очень поверхностоное объяснение, лучше найдите статью на эту тему

    • @gaitavr1992
      @gaitavr1992 4 года назад +9

      @@zerocode2909 Я знаю ответ на вопрос, коммент к тому, чтобы зрителю об этом донести

    • @valerii-barabanov-vvb
      @valerii-barabanov-vvb 3 года назад +13

      @@gaitavr1992 Еще можно было бы рассказать, как тоже самое на ассемблере написать, для полного понимания))

    • @gaitavr1992
      @gaitavr1992 3 года назад +14

      @@valerii-barabanov-vvb Потом вот такие, как вы приходят на собеседования и не знают ничего о работе языка и движка. При чем тут ассемблер? Внутренности енумератора должен знать любой разработчик уровня мидл+. Вам лишь бы показывали как игру сделать за час да как пару скриптов накидать

    • @valerii-barabanov-vvb
      @valerii-barabanov-vvb 3 года назад +12

      @@gaitavr1992 Это совершенно разные уровни абстракции. У "таких как вы" сначала надо разобраться в енумераторе, а потом надо разобраться в компиляторе, Си подучить и ассемблер, потом научиться в хешредакторе программы писать, потом компьютеры собирать, а то так же непонятно, что корутина делает, пока не разбоерешся как электроны по проводам ходят. "Такие как вы", у вас вообще воспитание есть, что вы так обращаетесь к людям? "Таких как ВЫ" проводить собеседования вообще допускать нельзя. Какое, блять, ты вообще право имеешь меня с кем-то сравнивать, такиекаквыкать мне?

  • @insaneone-7220
    @insaneone-7220 4 года назад +42

    Полезный материал, думаю многие наконец перестанут бояться корутин)

    • @YasnaKo
      @YasnaKo 3 года назад +1

      Два любимых русскоязычных геймдев блогера в одном месте, мимими

    • @realmukaUnity
      @realmukaUnity 2 года назад +2

      Не думал тебя тут увидеть) Смотрю твои видео, спасибо что даёте такие ценные знания

    • @KotleKettle
      @KotleKettle Год назад

      Ничего не понял, автор слишком быстро показывает и тараторит. Не понимаю, откуда столько хвалебных отзывов.

    • @boost_456
      @boost_456 7 месяцев назад

      @@KotleKettle смотрите документацию, там никто не тараторит и можно прочитать все детали

  • @bomber4273
    @bomber4273 6 месяцев назад

    Наконец-то понял, как работать с корутинами, до этого видео посмотрел 2 других и там просто показали синтаксис, не больше. Спасибо!

  • @mykytamarkianov4870
    @mykytamarkianov4870 4 года назад +12

    Четкий видос)
    Еще бы про Async Await-ы такой же)

  • @Vorono4ka
    @Vorono4ka 4 года назад +14

    Вау, благодаря этому видео смог представить как можно улучшить игру, спасибо)

  • @МихаилСанаев-с7ъ
    @МихаилСанаев-с7ъ 4 года назад +1

    Спасибо за видос! Когда начинал, никак не мог понять как всю логику запихнуть в апдейт, потом открыл корутины и жизнь стала проще

  • @МаксимРольщиков
    @МаксимРольщиков 4 года назад

    Когда только начинал в юнити, сразу же потребовалось создать спавнер врагов, но к сожалению не смог быстро отыскать нужную (и ПОНЯТНУЮ) инфу по корутинам в Unity. Наткнулся на Invoke и собственно им и пользовался (и придумывал много костылей), а оказывается всё было так просто. Спасибо!

  • @illoprin
    @illoprin 4 года назад +1

    Хоть я и повсеместно использовал корутины в своем коде, но я не знал, что с помощью них можно делать такие сложные последовательности анимаций! Спасибо за интересную инфу!

  • @t2g4_channel
    @t2g4_channel 2 года назад

    Спасибо за толковое и легкое донесение. Еще со временем когда только изучал Unity как-то корутины как "что-то нихрена непонятное и походу взрывоопасное" и использовал только в случаях крайней необходимости, теперь надо изучить их и попрактиковать! Спасибо!

  • @zarplatatv4556
    @zarplatatv4556 4 года назад +8

    Было бы хорошо еще посмотреть урок про много поточность в unity. А про корутины спасибо

    • @ivanm71
      @ivanm71 4 года назад

      Ultra-Money, ну, это обычную многопоточность в с# тогда надо смотреть (скорей всего). Таски и await async

    • @lulook2806
      @lulook2806 4 года назад

      Насколько я знаю, Unity не поддерживает многопоточность, и при попытке запустить ещё один поток выбрасывает исключение.

    • @ivanm71
      @ivanm71 4 года назад

      @@lulook2806 поддерживает.

    • @hanmayujiro1433
      @hanmayujiro1433 4 года назад +1

      @@ivanm71 async/await - механизм асинхронности и к многопоточности не имеет никакого отношения

    • @ivanm71
      @ivanm71 4 года назад

      @@hanmayujiro1433 я тред в юнити прекрасно создавал для сокетов

  • @cheburek5116
    @cheburek5116 4 года назад

    первый видео ролик где я понял меньше 30% материала, наверное куча инфы, автор постарался на славу

  • @just4funTony
    @just4funTony 4 года назад +8

    удивило что ты сказал что корутины не так популярны среди новичков ) Мне казалось это основа основ)

  • @festi7399
    @festi7399 2 года назад

    Спасибо, то что нужно было в ролике, ты лучший!

  • @sirj3714
    @sirj3714 4 года назад

    Просто огонь! Пойду гляну что там еще на канале интересненького :D

  • @akstis4183
    @akstis4183 4 года назад

    Давно ждал этого урока. Пока никто не объяснил что они такое зачем нужны и т.д. Спасибо

  • @АлександрРодионов-д1ф

    Спасибо огромное. Благодаря Вам мой код сократится на множество строк.

  • @thisismaqsa4633
    @thisismaqsa4633 4 года назад

    Очень много полезной информации в одном коротком видео. Спасибо!

  • @Rieltor.-hello
    @Rieltor.-hello 2 года назад

    Отдельное спасибо за хорошие субтитры

  • @unnamer345
    @unnamer345 4 года назад +3

    12:30 Вот только корутину нельзя остановить с помощью StopCoroutine если она запустилась прямой ссылкой.

  • @skf-wm7ft
    @skf-wm7ft 2 года назад

    Круто! Очень хорошо объяснил👍

  • @ruslan_yefimov
    @ruslan_yefimov 3 года назад

    Спасибо огромное)
    Из ролика понял, что можно запускать асинхронные задачи из корутин, что расширяет их область применения, очень даже. По-больше бы таких роликов на русском ютубе, и жизнь стала бы легче.

  • @cbubg
    @cbubg 4 года назад

    Великолепная подача материала, большое спасибо!

  • @Yana-e2b
    @Yana-e2b 4 года назад

    очень здорово. долго искала такое видео

  • @Salvadorioo
    @Salvadorioo 8 месяцев назад

    Что я вынес с урока:
    - корутина позволит тебе задерживать пчелочку на месте, а потом сделать чтобы она упала
    - корутина сможет спаунить с пчелки монеты
    - корутина заканчивается на тина, а ещё там всякие yield return ы есть, которые помогают процессы на время задерживать (на время или до выполнения какого -то условия)

  • @psy_gamer
    @psy_gamer 4 года назад

    Твои уроки как всегда великолепны!)

  • @denisgoodman4492
    @denisgoodman4492 4 года назад

    Шикарно. Лучшее объяснение из всех виданных как на русском, так и на английском ( :) скорость на пределе восприятия, информация очень плотно временами хочется поставить WaitForSecond (1.f);

  • @mrmelog4320
    @mrmelog4320 2 года назад

    Оч классный ролик все понятно и интересно:3

  • @АлексейКульдеев
    @АлексейКульдеев 4 года назад

    Спасибо, очень полезный материал. Так держать!Всё круто!

  • @learnwithyan
    @learnwithyan 6 месяцев назад

    класс, спасибо за обучение

  • @chizhikovdanilgamedev
    @chizhikovdanilgamedev 4 года назад +7

    Братан, не плохо объяснил, но ошибка многих. Корутина регистрируется как ты и сказал в главном потоке Unity, но даже после остановки ее по мере выполнения кода или ручной остановки, ещё живёт в самом потоке, по этому с корутинами нужно быть осторожным. Они на первый взгляд не тяжёлые, но они очень даже дорогие и хоть этого часто не видно, но корутина сама по себе чуть замедляет выполнение кода, ну как я и сказал, она не дешёвая

    • @lawsonllka271
      @lawsonllka271 4 года назад

      MBSCore ну это потому что все данные в корутине живут пока она не завершится, в след. кадре.

    • @MaruskaStarshaya
      @MaruskaStarshaya 3 года назад

      чел, ты можешь запустить 10 000 корутин и ничего не упадёт. А можешь одним циклом while в Апдейте полностью скрашить приложение - теперь еще раз подумай насколько они "тяжёлые")

  • @cyanmargh
    @cyanmargh 4 года назад +1

    Стоило рассказать ещё про составление очередей корутин, вызов корутин по имени, передача параметров в корутины, хотя видео правда хорошее.

  • @andrewdobosh2153
    @andrewdobosh2153 4 года назад

    Очень крутые ролики у тебя))
    Хотелось бы чтоб ты заснял курс для начинающих по unity, сам я андроид разработчик, но по твоим видео начинает симпатизировать и unity))

    • @EmeraldPowder
      @EmeraldPowder  4 года назад +1

      Спасибо)
      Если есть опыт разработки то думаю курс для начинающих не нужен, там в юнити все довольно интуитивно

  • @pavelyurchenkov8644
    @pavelyurchenkov8644 4 года назад

    Отличный материал!!! С меня лайк+подписка

  • @IamTagir
    @IamTagir 4 года назад

    Хорошее видео. Отличная идея сделать отдельный класс с простыми корутинами на движение и прочее.

  • @dertfin1
    @dertfin1 Год назад +1

    А корутина работает в фоновом режиме, или код после корутины будет работать только, когда корутина закончится?

    • @Some_kind_of_something
      @Some_kind_of_something 8 месяцев назад

      Если ещё актуально, в фоновом режиме

    • @dertfin1
      @dertfin1 8 месяцев назад

      Это аналог Thread?

  • @hanmayujiro1433
    @hanmayujiro1433 4 года назад +7

    6:29 - можно, плиз, ссылку на картинку?

    • @vplotnikov
      @vplotnikov 4 года назад

      @@hanmayujiro1433 не за что, обращайся)

  • @dmitriygray6616
    @dmitriygray6616 4 года назад

    Боже как же годно! Господа это лайк

  • @ВалерійДейнека-с2ч
    @ВалерійДейнека-с2ч 4 года назад +2

    Ray marching в HDRP/URP! И кроме этого слелай просто видео про ray marching. Думаю будет круто.

  • @Tmerus
    @Tmerus 4 года назад

    9:05 ну... не сказал бы... иногда вместо ифов проверки более полезна или для убирания сообщения ошибки, если она не критична для тестирования, но мешает отслеживать что-то реально критичное ввиду спама в лог

  • @ЭрикИльвирович
    @ЭрикИльвирович 4 года назад

    Как всегда шикарно )

  • @arsenbabaev1022
    @arsenbabaev1022 4 года назад +1

    Ожидание до нового фрейма помогло разбить генерацию чанков на мелкие задачи и пофиксить просадки фпс при подгрузке чанков (когда все выполнялось за 1 фрейм).

  • @ЄвгенБойко-ф9ж
    @ЄвгенБойко-ф9ж Год назад

    Я прям рессмеялся когда узнал что можно вот так просто взять и вставить одну(!) строчку между двумя, и обойтись обычной корутиной, вместо того чтобы писать огромную функцию таймер с кучей архитектурных сложностей 😂😂😂

  • @IlyaMoss
    @IlyaMoss 4 года назад +4

    Если дело касается анимаций, уж тем более вещей, типа "сделать ui прозрачным со временем", лучше использовать DoTween. Корутины использую только если очень нужно выполнить методы по цепочке, с задержками, и эти методы не связаны с монобехейвером. Во всех остальных случаях - только DoTween, даже твой простой пример из видео занял строчек 15, через твины это делается одной. Я не плохой человек, мне нравятся твои видео, но зачем писать хорошие анимации не одной строчкой?)

    • @homexp13
      @homexp13 4 года назад

      Это скорее просто как пример, лёгкий для понимания.

    • @IlyaMoss
      @IlyaMoss 4 года назад +2

      @@homexp13 До меня только что дошло, что видео "про корутины", значит видео ок, а мой комментарий ни к селу ни к городу)

  • @samserious5483
    @samserious5483 4 года назад

    Отличное видео, спасибо!

  • @seldemirov
    @seldemirov 4 года назад

    Помню как то делал корутину содержащую таймер который должен был сбрасываться в 0 в случае если объект покидал триггер. Но он не сбрасывался. В итоге открыл для себя async await. Все возможности корутин есть и даже больше, синтаксис почти тот же + вроде, нет этих проблем с отключением компонента и продолжением выполнения процесса.

  • @vano2vano
    @vano2vano 4 года назад

    Отличное видео, спасибо

  • @drseedon
    @drseedon 4 года назад

    Короютины лучшее что можно придумать. Я с их помощью полностью логику с босса сделал

  • @brickman3171
    @brickman3171 4 года назад +1

    Покажи пожалуйста как реализовать FSM на unity.

  • @toxicknight3079
    @toxicknight3079 4 года назад

    Вот это класс. Кучу пробелов устранил, благодаря этому видео.
    Запиши, плиз, в таком же обзорном стиле видео по веб запросам, ради христа. Чтоб вначале вкратце о WWW (на них куча старого кода, уроков, плагинов и тд) и потом о UnityWebRequest'ах. В идеале с парочкой примеров, как заменять в устаревшем коде www на UnityWebRequest.
    По этой теме на русском инфы почти никакой.

  • @knightsofthenight4459
    @knightsofthenight4459 4 года назад

    Какие есть способы приостановки выполнения корутины с последующим возобновлением? К примеру при появлении всплывающее подсказки на экране, объекты движущихся /анимированые с использованием корутин замерли

  • @gamemoments8183
    @gamemoments8183 3 года назад +1

    Скажите в чем разница между WaitForSeconds и Invoke ??

  • @MaruskaStarshaya
    @MaruskaStarshaya 3 года назад

    В чём преимущество использования корутины для MoveForward, например, по сравнению с размещением его в Апдейте?

  • @bogotoff
    @bogotoff 4 года назад +1

    Было бы полезно рассказать как использовать yield конструкцию для создания своих корутин, т.е. без MonoBehaviour. Как используется такая конструкция в C# например для обхода массива, или хотя бы как именно вызываются корутины в MonoBehaviour

    • @lawsonllka271
      @lawsonllka271 4 года назад

      Timur Bogotov зачем?! Это уже лишнее и касается уже программирования в целом, а не юнити.

    • @EmeraldPowder
      @EmeraldPowder  4 года назад +2

      Да, это тема широкая, в этом видео я решил не углубляться как в целом работают IEnumerator'ы и yield'ы. Но если про работу с коллекциями рассказывать то это уже скорее к С# чем к Unity относится, так что не в это видео

    • @bogotoff
      @bogotoff 4 года назад

      @@EmeraldPowder Да, всё верно. Наверное большинству это и не нужно

  • @hey2956
    @hey2956 4 года назад

    Спасибо, хороший туториал

  • @AmbassadorOfLogic
    @AmbassadorOfLogic 3 года назад

    а у меня почему-то StopCoroutine(corName()) - не работает. попробовал создать экземпляр, с трудом корутина запустилась, но все равно метод остановки не работает, спасает только стополлкорутинс :"(

  • @ДенисСаранин-м1и
    @ДенисСаранин-м1и 4 месяца назад

    Не понял чем отличается if(vasya) yield return null отличается от if(vasya) return без всяких корутин

  • @777nayman
    @777nayman 3 года назад

    А как сделать чтобы корутины не накладывались, допустим есть несколько обьектов при нажатии на которой он передвигается с помощью корутины с точки А в точку Б, у меня получается что пока он передвигается (допустим задал 5 секунд), я могу нажать на другой обьект и он тоже начнет свое движение. А мне нужно чтобы пока первый обьект не дошел до точки Б, другие обьекты не могли двигатся. Пробовал с переменной bool играя с true и false, что то не работает.

  • @etoya413
    @etoya413 4 года назад +1

    что делать? выдаёт ошибку - Assets\Scenes\scripts\courutine.cs(19,61): error CS0117: 'Quaternion' does not contain a definition for 'indentity'
    (я совсем новичок в этом)

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Правильно Quaternion.identity, советую пользоваться автодополнением в студии, тогда все эти названия не надо запоминать

    • @etoya413
      @etoya413 4 года назад

      @@EmeraldPowder спасибо, очень долго не мог понять что не то

  • @ve1c0m
    @ve1c0m 4 года назад

    Ещё можно рассказать про параллельно-последовательное выполнение корутин

  • @vladyan01
    @vladyan01 2 года назад

    Корутины и асинхронные методы разные вещи?

  • @prosto_chel544
    @prosto_chel544 2 года назад

    а как передовать корутины между скриптами ?

  • @region34cg
    @region34cg 4 года назад

    Привет, как насчёт видео обзора по probuilder unity.

  • @ivanm71
    @ivanm71 4 года назад

    Полезно, спасибо

  • @Lucio11a
    @Lucio11a 2 года назад

    Как раз тут вчера делал прыжок через корутины)) по заданию от препода, сделать там всякое без использования Update()
    Хз че людям они не нравятся :D очень гибкий инструмент...

  • @MatuSS39
    @MatuSS39 4 года назад +1

    Отличный видос! А что за редактор кода используется? Уж очень приглянулся

    • @okely4755
      @okely4755 4 года назад

      Rider

    • @MatuSS39
      @MatuSS39 4 года назад

      JetBrains Rider называется, если вдруг кому тоже стало интересно

    • @MatuSS39
      @MatuSS39 4 года назад

      @@okely4755 спасибо

  • @mtrukhan
    @mtrukhan 4 года назад

    Объясни пожалуйста, что такое корутина "под капотом" как они связаны между собой и почему остановка корутины осуществляется, в том числе, через "break".

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Это тоже тема интересная, но уже скорее не про юнити а про C#, да и тянет на отдельное видео

    • @mtrukhan
      @mtrukhan 4 года назад

      @@EmeraldPowder
      был бы рад такому видео, так как впервые на детальное объяснение напоролся лишь спустя 2 года коммерческой разработки)

  • @artUSUN
    @artUSUN 4 года назад +1

    Оч годный контент, спасибо тебе огромное!
    Есть в планах выпустить что-нибудь про свет в 3д?)

  • @davidkalinovsky1216
    @davidkalinovsky1216 4 года назад +2

    Когда выключаешь скрипт на объекте (смена enabled) ты выключаешь только Update(), а остальные методы функционируют

    • @antonybe2968
      @antonybe2968 4 года назад +1

      Не только, но в целом именно так. Галка не отключает компонент, она всего лишь отключает несколько событий MonoBehaviour - docs.unity3d.com/ru/530/ScriptReference/MonoBehaviour.html.

  • @АндрейАндреевич-щ2н

    Случайно увидел это видео, в общем для новичков полезно. Но далеко не ВСЁ о корутинах!!!
    Автор, зря вы про то что try/catch ВЕСЬ ГЕЙМДЕВ не использует, это далеко не так.
    Про try/catch в корутинах важно было сказать что нельзя делать так:
    private IEnumerator MyCoroutine()
    {
    try
    {
    yield return null;

  • @blvcknwh1te
    @blvcknwh1te 4 года назад +1

    Очень полезное видео!
    Скажи пожалуйста, обязательно ли прерывать корутину после её выполнения с помощью break, или она прерывается сама после любого yield return?

    • @trushkeen
      @trushkeen 4 года назад

      Если не вызывать ее в Update, то она выполнится один раз до конца, брейком можно завершить заранее

    • @blvcknwh1te
      @blvcknwh1te 4 года назад

      @@trushkeen понял, спасибо

  • @taode2623
    @taode2623 3 года назад

    Приветствую друзья, может кто подскажет можно ли в рамках одного скрипта запустить респаун двух объектов, в разных точках и с разной задержкой респауна? если можно то как?

  • @Grim_J0nes
    @Grim_J0nes 4 года назад

    Так в чем преимущество этого метода, я не понял, если честно. К примеру, я могу написать всю логику в методе Update с счетчиком времени и всё.
    Почему такую логику(со счетчиками) стоит выносить именно в корутины? просто для удобства и чтобы не заводить переменные для таймеров?

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Иногда Update лучше подходит, но когда нужно сделать 5-10 непохожих действий с интервалом в пол секунды - то придётся делать либо 10 переменных таймеров, их инициализировать и следить за порядком. Либо делать enum с 10 значениями, большой switch, и один таймер. Но вообще технически всё что можно сделать корутинами - можно и через обычный апдейт

    • @Grim_J0nes
      @Grim_J0nes 4 года назад

      @@EmeraldPowder Понял, спасибо за ответ

  • @sasha-clown
    @sasha-clown 4 года назад

    Я правильно понимаю, что это почти тоже самое, что генераторы или async/await в javascript? А то я про эти корутины слышал только из Kotlin

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Да, в C# тоже есть async/await, и их даже можно использовать в Unity почти точно так же как и корутины. Но я привык к корутинам, они более традиционные в юнити, так что их в основном использую

  • @antonybe2968
    @antonybe2968 4 года назад +1

    Маленькая неточность. StopAllCoroutine останавливает только корутины, которые запущено от имени данного MonoBehaviour. Т.е. если на объекте их два, то корутины второго будут продолжать выполняться.

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Да, спасибо за поправку, я как-то непонятно про это сказал. Там вот с привязкой то ли к объекту, то ли к компоненту, как раз много всяких неоднозначностей

    • @antonybe2968
      @antonybe2968 4 года назад

      В документации к StopAllCoroutines написано так: Note: StopAllCoroutines operates only on the one script it is attached to. Я проверял, можете проверить, так оно и работает ;). Вообще документация у Unity неплохая, часто находишь там то, что по началу пропускаешь по невнимательности. Так что всем советую внимательно ее изучать, и, конечно проводить эксперименты.

  • @TheMaither
    @TheMaither 4 года назад +2

    корутины: существуют
    люди: Thread.Sleep(TimeSpan.FromSeconds(5));

  • @tarytale1582
    @tarytale1582 2 года назад

    Привет! Я новичок, подскажите как сделать задержку после нажатия кнопки на экране (прыжок в данном случае) прежде чем смогу нажать ее повторно. Хочу попробовать таким методом убрать многократные прыжки (я знаю что есть и другие способы убрать многочисленный прыжок, но интересно можно ли этим способом так делать).

    • @BastionKadabr
      @BastionKadabr 2 года назад

      вы про Input GetButton ? надо что бы в каждом кадре не повторялось использовать или down или up , что бы еще меньше на моторику пальцев влияло (если не бить по клавише) лучше Up , те действие будет выполнено не только когда кнопка нажата но и отжата

  • @ilyanaumov4251
    @ilyanaumov4251 3 года назад

    Получается корутины работают асинхронно?

  • @Dziepso
    @Dziepso 4 года назад

    Спасибо, за видео, но у меня вопрос. Можно ли записать в куратину вот это -
    Int a = 1, b = 1;
    a + b;
    ?

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Спасибо что смотрите :)
      Да, всё что можно запихать в обычную функцию будет точно так же выполняться и в корутине

  • @lulook2806
    @lulook2806 4 года назад

    Основа корутинов - средство генерации анонимных итераторов в C# при помощи инструкции yield. Можно легко написать собственную реализацию корутинов при помощи этого языкового средства. Грустно, что подобный механизм не добавляют в Java - это ведь сильно расширяет возможности языка.

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Да, yield это вещь мощная. Думал даже сделать видос про реализацию своих корутин, чтобы объяснить как они работают, но решил что это уже слишком будет)
      В Java вообще ребята консервативные, не пойму как они без перегрузки операторов живут столько

    • @lulook2806
      @lulook2806 4 года назад

      @@EmeraldPowder добавить бы в Java перегрузку операторов и неуправляемые типы - был бы шикарный язык. Мне очень нравится, как в нём реализован механизм делегатов. Он универсальнее. От делегатов C# пахнет указателями на функции C++. В целом, в Java вполне можно реализовать что-то похожее на yield инструкции, только конструкция эта будет выглядеть не так элегантно, как в C#.

  • @ДмитрийТиханский-ф5ю

    Было бы классно объяснить о корутине после коллизии

  • @lkghost7
    @lkghost7 4 года назад

    надоже, я думал я один ридером пользуюсь )

  • @sevatar2619
    @sevatar2619 4 года назад

    Хочу сказать по поводу паузы. Обычна она реализуется установкой Time.timeScale = 0, на что корутинам собственно все равно, они продолжают выполняться. Так что если хочешь чтобы паузы с корутинами работали корректно, приходится писать костыльные ифы. Если кто знает более нормальное решение, отпишитесь.

    • @EmeraldPowder
      @EmeraldPowder  4 года назад +2

      Смотря что в корутине делать. Если например спаун врагов раз в секунду - то юзаем WaitForSeconds, а не WaitForSecondsRealtime, то при остановке через timeScale всё будет корректно работать (на паузе спауна врагов не будет). А если движение например анимацией через какой-нибудь MoveTowards - то умножаем на Time.deltaTime, и он будет равен 0, если timeScale==0

  • @nooftube2541
    @nooftube2541 4 года назад

    Ещё одна "фича" корутин в том что они классы и yield return new создаёт множество объектов которые сборщик мусора потом должен собрать. Поэтому желательно особенно в циклах сначала создавать один илд инструкцию и каждый раз возвращать один и тот же экземпляр инструкции.

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Да, это их минус. Некоторые пытаются делать игры вообще без аллокаций, чтобы gc не влезал, тогда не подходят корутины. А так, если видишь в профайлере что сборщик много занимает, придётся постараться повыносить эти инструкции в локальные переменные, или заменить основные на yield return null, он вроде ничего не создаёт

    • @nooftube2541
      @nooftube2541 4 года назад +1

      @@EmeraldPowder я имею ввиду что если цикл и всегда фиксированный вейт, то написать сначала создание корутины и потом йелд одной и той же, не слишком сложно. Хотя конечно это уже оптимизация. Жаль, что только не упоминул в видео :)

  • @webStandard1151
    @webStandard1151 4 года назад +2

    Как насчет сделать урок по инвентарю в играх?

  • @greemdim4611
    @greemdim4611 3 года назад

    Го урок по кулдауну

  • @Putin-Lox
    @Putin-Lox 3 года назад +1

    КАКАЯ ЕЩЁ НАХЕР КОРУТИНА, КОРОУТАЙН ТАМ НАПИСАНО.

  • @wowka7063
    @wowka7063 3 года назад

    А я тут использовал их для зацикливания или нажатия с паузой при нажатии кнопки UI

  • @cgytrus
    @cgytrus 4 года назад

    А можно теперь про многопоточность? :)

  • @Dippps
    @Dippps 4 года назад

    Часто использую вместо анимации, чтобы не добавлять аниматор везде где придется.

  • @rinatyagafarov5328
    @rinatyagafarov5328 4 года назад

    thank you for video

  • @DanDiablo
    @DanDiablo 3 года назад

    Все бы хорошо, но код плохо читается на темной теме.

  • @СашаБеспалов-щ4е
    @СашаБеспалов-щ4е 4 года назад

    Давай про многопоточность

  • @kawakami_idv
    @kawakami_idv 4 года назад

    Зачем они нужны когда есть DOTween?
    (не считая асинхронных загрузок или примитивных веб-запросов)

  • @MrDeadLord
    @MrDeadLord 4 года назад

    Знаю про них с начала обучения, но ни разу не смог запустить. То одна, то другая проблема. Сейчас это "Не удается преобразовать из ...IEnumerable в string". И делай что хочешь. Превожу в стринг, так корутина даже не стартует

  • @Tezla0
    @Tezla0 4 года назад +4

    Писать машину состояний - велосипед, т.к yield компилятором преобразуется в готовую машину состояний.

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Верно, вот примерно такую же машину с enum'ом и переключением состояний друг за другом иногда встречаю в чужом уже, вместо корутин. Я когда-то смотрел через ilspy во что преобразовываются методы с yield, чтобы разобраться в этом. Но в этот видос никак не получилось впихнуть про это все)

  • @vabka-7708
    @vabka-7708 4 года назад

    Я в юнити не шарю, и у меня вопрос больше к разрабам юнити.
    Почему сделали это через yield, а не через async-await? Сделали бы что-то типа async Coroutine Coroutine() { await AnoterCoroutine();}

    • @EmeraldPowder
      @EmeraldPowder  4 года назад

      Насколько я знаю когда появлялись корутины в C# ещё не было async/await. А сейчас есть интерфейс для корутин с этими асинками, но мне кажется с yield выглядит проще

    • @vabka-7708
      @vabka-7708 4 года назад

      @@EmeraldPowder я нашёл либу UniTask - там корутины реализованы через async await (логика работы та же, даже все методы доступны). Лично мне такой подход нравится больше, тк IEnumerable и yield всё-таки изначально для коллекций создавались (и рекомендуется использовать именно для них, а не для кастомных стейт машин)

  • @kamal.x
    @kamal.x 4 года назад

    Пожалуйста делай урок по Art Engine

  • @njkzchannel8609
    @njkzchannel8609 4 года назад

    Крутой урок. Like. Го урок по многопоточности.