Спасибо большое за видео. Лучший канал по "подкопотной" юнити, да и юнити в целом
@Tera-h7e2 ай бұрын
@@АльбертАвагян-м9т Ну чем он лучше? Я не понимаю. Автор в асинхронности вообще ничего не понимает, он даже стейт машину объяснил неправильно. Он не рассказал что собой представляют асинхронность, а что - синхронность. Не сравнил с многозадачностью и не рассказал как именно обрабатываются асинхронные операции, ибо ,обычно, новые потоки для них не создаются. Не понимаю, зачем хвалить автора за, практически, отсутствие знаний в данной области
@behappianstudio35763 жыл бұрын
Круто! Пошёл юзать Invoke! Как всегда ничего не понял))) Но это мои личные проблемы! Спасибо за ваш труд, надеюсь, скоро я преисполнюсь!
@luckyjava65883 жыл бұрын
Попробуй Invoke в корутине, вызываемой в Invoke!
@gaitavr19923 жыл бұрын
Смотрел видео emerald powder? Оно даст старт
@behappianstudio35763 жыл бұрын
@@gaitavr1992 Порой сложно переучиваться с чего-то, особенно, если не собираешься становиться в этом деле профи. Меня научили пользоваться корутинами только как таймерами, а дальше уже как пойдёт. Поэтому без желания даже смысла не вижу))) Просто стараюсь из каждого вашего видео брать что-то полезное по стилистике и по структуре. Ну и слушать главное, мало ли усвою!
@leksaysdevelopment74233 жыл бұрын
Кайфовый видос ! Спасибо что делишься опытом и даешь инфу по теме в сжатом формате, не размазывая инфу на 100 видосов. По поводоу IEnumerator в MonoBehaviour функциях. Если ты работаешь с VR, то для того, чтобы начать работать с инпутом от рук, нужно, чтобы шлем их нашел. А это зависит от юзера, который может показать или спрятать руки от камер шлема, и от того, насколько быстро шлем найдет и передаст в игру данные о руках. Получается, если тебе нужно инициализировать какой-то класс в Start с использованием данных от рук (кости пальцев, позиция рук и т.д.), то нужно подождать, пока шлем передаст данные о руках. Вот в таком случае я использую IEnumerator Start(). Можно, конечно, это все раскидать на 2 метода и делать условия, но вроде проще все сделать в старте.
@gaitavr19923 жыл бұрын
Да, старт бывает удобен для этого
@easycodeunity3d143 жыл бұрын
Знай я это вчера, наверняка прошел бы собес в одну именнитую компанию )) Крутой канал, очень много полезного
@SowilTM3 жыл бұрын
Спасибо, Максим. Очень качественная и понятная подача информации, продолжай в том же духе.
@Tera-h7e2 ай бұрын
@@SowilTM Ну чем она качественная? Я не понимаю. Автор в асинхронности вообще ничего не понимает, он даже стейт машину объяснил неправильно. Он не рассказал что собой представляют асинхронность, а что - синхронность. Не сравнил с многозадачностью и не рассказал как именно обрабатываются асинхронные операции, ибо ,обычно, новые потоки для них не создаются. Не понимаю, зачем хвалить автора за, практически, отсутствие знаний в данной области
@НазарГуртов-е5б3 жыл бұрын
Спасибо за контент, дядь)
@donbolshoff89652 жыл бұрын
Офигенский ролик, Спасибо!
@MrWatchmanLP3 жыл бұрын
Спасибо за видео!
@СергейПясковский-л3ъ3 жыл бұрын
Огромное спасибо за видео и отдельно за ответ на просьбу. Подобных видео должно быть побольше в Ютубе. 👍 p.s. ответ я знал, но вряд-ли так рассказал.
@gaitavr19923 жыл бұрын
Что-то за последние месяца на моей памяти 4 канала перестали выпускать видео. Brackeys, Flatingo, Emerald Powder, insane One. Наверное площадки другие нашли или приоритеты поменялись
@СергейПясковский-л3ъ3 жыл бұрын
@@gaitavr1992 Да, я смотрел их, но теперь смотрю твой канал.
@AlexStraga3 жыл бұрын
@@gaitavr1992 Бреки к сожалению все, так и сказали. Остальные видимо либо заняты, либо подустали. Себастьян вон тоже не часто выпускает видосы.
@illia_ryzhii Жыл бұрын
@@gaitavr1992 Дуже чекаю на ваші нові відео, повертайтесь скоріше(
@petrosaslanidis3 жыл бұрын
Спасибо , как всегда занимательно.
@ИгрушкиИльюшки3 жыл бұрын
Отлично и понятно. Спасибо.
@Diyozen3 жыл бұрын
Очень круто!
@vladimircuraciov3 жыл бұрын
Спасибо огромное!
@artursveshnikov76683 жыл бұрын
Ваще не понятно, но очень интересно)) Я так понимаю в dotnet вообще такой проблемы нет. Всегда пользовался async/await и он более чем справляется. Слышал, что корутины в котлине есть, а оказывается у соседей по цеху из юнити тоже)
@gaitavr19923 жыл бұрын
Принцип работы слишком разный у этих двух инструментов. Когда появилась корутина - юнити не поддерживала шарп с тасками
@DmitryTimofeev_general3 жыл бұрын
Был, смотрел, норм.
@ИгрушкиИльюшки3 жыл бұрын
Кто бы сомневался)
@akstis41833 жыл бұрын
Никто почему-то не написал, почему при вызове корутины потеряется кадр. А потеряется он потому, что update вызывается раньше чем вызовется корутина?
@grimseal3 жыл бұрын
Тоже не понял этот момент, т.к. до этого автор говорит что при старте корутины она сразу до первой yield инструкции отрабатыват
@gaitavr19923 жыл бұрын
Попробуйте написать код с дебагом. Один дебаг после старта корутины, один внутри до yield return null, и один после
@daniilparokonnyy79803 жыл бұрын
WaitUntil теперь всегда буду юзать для отслеживания нажатия клавиш)
@ruslan_yefimov3 жыл бұрын
Надеюсь, не для управления..
@qwertysalo86653 жыл бұрын
Спасибо
@nwsx3573 жыл бұрын
хорошее видео, но я заметил одну неточность. у вас на канале в названии каждого видео написано «unity3d», а на самом деле движек называется просто «unity». Если просто вдруг кто спросит - будешь знать ыы. шутка. канал занятный. я новый подписчик ы
@gaitavr19923 жыл бұрын
Откуда пришел? Фейсбук, контакт или что-то еще? Чисто для статистики)
@andrewmolotkoff42313 жыл бұрын
@@gaitavr1992 по стилю коммента понятно, что от сакутина
@ruslan_yefimov3 жыл бұрын
Если начал кодить на той неделе, то конечно Unity, но раньше была приписка 3d)
@nwsx3573 жыл бұрын
@@ruslan_yefimov а ты походу учил по этим высерам и теперь не знаешь как движек называется. скачай любую версию за любой год из архива и посмотри окно “about”
@Tera-h7e2 ай бұрын
@@nwsx357 Ну в чем это видео хорошее? Я не понимаю. Автор в асинхронности вообще ничего не понимает, он даже стейт машину объяснил неправильно. Он не рассказал что собой представляют асинхронность, а что - синхронность. Не сравнил с многозадачностью и не рассказал как именно обрабатываются асинхронные операции, ибо ,обычно, новые потоки для них не создаются. Не понимаю, зачем хвалить автора за, практически, отсутствие знаний в данной области
@semenshchepkin1333 Жыл бұрын
Максим, привет! спасибо за видео. всё изложенное понятно, однако, есть вопрос в контексте Task VS Coroutine: я только начал знакомство с юнити (есть опыт в бэкэнде), и сразу встрял с тасками - мой код прекрасно работает в редакторе и в скомпилированной для десктопа версии, но в браузере - нет. я вычитал, что таски вообще не поддерживаются в WebGL из-за однопоточности js. правильно ли я понял, что для браузерных игр мой единственный выход - писать всё на корутинах? если да, я обескуражен, и мне кажется, что это критически важный момент, который необходимо явно проговаривать в подобных видео)
@Tera-h7e2 ай бұрын
Ты хоть расскажи людям, что представляет собой асинхронность в полной мере, ибо показать стейт машину - это вершина айсберга. Например, что асинхронный код выполняется где-то, но не у другом потоке, так как это операция называется I/O Bounds (то есть ввода - вывода). А такие операции не затрагивают CPU, а затрагивают другие устройства и их доайвера для обработки операционной системой. Например для await.Task какого нибудь чтения из файла, эта задача передаются в очередь операционки и там ждет, пока жёсткий диск завершит чтение ну или запись, неважно. Потом сработает коллбек и винда скажкт компилятору, что она получила результат и можно в следующем пуле потоков вернутся в тот метод, в котором мы наткнулись на await, и выполнять код дальше в этом методе. А еще, когда код доходит до await, задача передается операционки и перенаправляется в главный поиок для продолжения работы основного потока. Спасибо за внимание
@Tera-h7e2 ай бұрын
Забыл, что если нужен поток, а именно у нас задача типа CPU Bounds, то это означает, что там происходят сложные вычисления и из-за этого нагружается процессор, такие операции уже нужно параллелить. Это делается с помощью await Task.Run(delegate)
@gaitavr19922 ай бұрын
Винда компилятору говорит? Ты точно знаешь как исполняется код на устройстве? И ещё - CPU или IO bound операции существуют только у разработчика в голове и он сам выбирает что применить для решения. Исполняемая среда этого знать не может, она выполняет инструкции
@Tera-h7e2 ай бұрын
@@gaitavr1992 Я имею ввиду, что винда компилятору отправляет колбек на то, что ожидание закончено и есть результат. Почитай за операции эти, в голове у разработчика хахахахах.
@Tera-h7e2 ай бұрын
@@gaitavr1992 Ты ещё скажи, что там потоки работают отдельные
@gaitavr19922 ай бұрын
@Tera-h7e вопрос тот же. Компилятору? Ты знаешь чем чем исполняется код который ты пишешь в Юнити?
@Котвбезумнойшляпе3 жыл бұрын
Прям уровень Университета))
@YooPita3 жыл бұрын
Не то слово. Я даже законспектировал некоторые моменты из ролика в тетрадь.
@ruslan_yefimov3 жыл бұрын
Даже лучше..
@ИванДерябкин-ц3д2 жыл бұрын
Корутина всегда теряет 1 кадр, потому что, после того как мы дошли до yield инструкции проверка на isDone вызовется только в след кадре, и только после нее мы перейдем к блоку кода после yield инструкции. Правильно ?
@gaitavr19922 жыл бұрын
Да
@aibaster3 жыл бұрын
Интересное видео. Спасибо за контент. Вопрос. Будут ли записаны видео по WPF к примеру?Не только по юнити(паттерны,работы джунов) же контент делать)
@gaitavr19923 жыл бұрын
Из не юнити планируется только ASP.NET, но там скорее опыт использования с пониманием того, что я далеко не опытный в этом деле. Java и Objective C в контексте плагинов тоже наверняка будут. WPF мне не зачем
@aibaster3 жыл бұрын
@@gaitavr1992 и то хорошо. Спасибо
@АнатолийПетрович-э8ч3 жыл бұрын
Я давно весь свой код переписал на асинхронку, пропали задержки при выполнении логики. Отличная вещь, если правильно пользоваться. А корутинами вовсе перестал пользоваться. Но, если делать это неумело, на асинхронках можно легко забить память и время процессора. Корутины в этом плане кажутся более безопасными. А чтобы асинхронный метод уничтожался вместе с обьектом и высвобождал память, я обычно делаю внешний bool, и подвязываю проверку bool внутри класса к OnDestroy и внутри асинхронного метода, после инициализации в классе OnDestroy меняю значения bool и асинхроннй метод уничтожается вместе с текущим классом куда он подвязан. Таким образом асинхронный метод при такой реализации никогда не останется в памяти после уничтожения обьекта\класса, и будет уничтожаться вместе с ним. И тогда можно не передавать в каждую асинхронную функцию токен на уничтожение, просто сделав его глобальным в текущем классе. Тоже как вариант реализации. Так же глобальный bool можно связать и с другими ключевыми событиями в классе MonoBehaviour, если это будет необходимо, например еще с OnDisable, чтобы при отключении обьекта, асинхронный код так же "уничтожался". Такой подход избавит от того, чтобы вручную прописывать уничтожение асинхронного метода как на 14:28 Но, тут еще зависит и от конкретных задач наверно, где то возможно быстрее будет написать код из примера на видео.
@AlexKokare_OpenMidn3 жыл бұрын
Захотелось сделать игру про павука, который пуляется корутиной. XD
@ruslan_yefimov3 жыл бұрын
ага, сделать каждую паутину реально корутиной xd
@YasnaKo3 жыл бұрын
На мой взгляд видео Emerald Powder нужно смотреть после этого. Я перечитала с десяток-другой статей/видео по теме, но почему-то в первый раз встретила такую простую но наглядную схему, поясняющую, чем же корутина отличается от обычной функции и что это такое. А примеры использования в мою голову не ложатся, пока я не пойму, что это вообще такое.
@YasnaKo3 жыл бұрын
Хех, если в прошлый подход к корутинам было понятно процентов 5, то теперь уже около 20, кайф)
@jugo-stream3 жыл бұрын
Возьми меня в ученики 🙌 Мастер
@Xa4_Xakum2 жыл бұрын
прошу передать спасибо Роману Сакутину за совет перейти на этот канал)
@BulatBulatov3 жыл бұрын
Подписался
@artemartem12359 ай бұрын
Надо обязательно упомянуть, что таски не останавливаются при выходе из плеймода
@Pravda-bw3tj3 жыл бұрын
так и не понял, а что по оптимизации, что выгоднее использовать
@MoronicSoul4 ай бұрын
ни чего не понял, обедал - смотрел. норм)
@vladoscrafter51173 жыл бұрын
Максим, хотел бы узнать, есть ли какая-то возможность создать хорошую Стейт машину не базируясь на патерне стратегия? Очень часто задаю себе этот вопрос, но достойного решения так и не нашел(
@gaitavr19923 жыл бұрын
А что не так в стратегии?
@CTePeoTun3 жыл бұрын
Ну и логичный вопрос, если у асинхронных методов больше преимуществ, то зачем юзать корутины? Не считая момента, что при разрушении объекта нужно прерывать асинхронный метод. Но наверняка с этим можно что-то придумать.
@gaitavr19923 жыл бұрын
С тасками невозможно привязаться к юнити ивентам(апдейт, рендеринг и тд). Плюс таска тяжелее в продолжении, когда вызывается метод пост в контекст, из которого была пауза
@koishigarin3 жыл бұрын
@@gaitavr1992 А что скажете про UniTask? Там вроде идентично практически всё со стандартными async/await и привязка к player loop есть.
@gaitavr19923 жыл бұрын
Разница в одном потоке
@andreypan16083 жыл бұрын
как сказал: Они являются полностью противоположными для удобного использования. 😁 что хотел сказать: Они являются полностью противоположными. Поэтому они удобны.
@5hillsgames4703 жыл бұрын
Максим, как можно с вами связаться? Есть предложение по работе
@gaitavr19923 жыл бұрын
Я не заинтересован в дополнительной работе
@design_art_style13 күн бұрын
А почему у меня в Яндекс играх только один раз выполнилась куратина😮
@4elowww7429 ай бұрын
Я использовал корутин зацикленный с методом
@lkghost73 жыл бұрын
только вот является ли карутина по факту асинхронной, можно ли ее так называть
@ruslan_yefimov3 жыл бұрын
асинхронная, если вызвать её через таску)
@AleksYurchenko2 жыл бұрын
Почему бы не сказать сопрограмма? Coroutine это сопрограмма.
@NoldoWalker3 жыл бұрын
1 - 4 - (если нажмут на пробел) - 5 - 2 - 3
@evgenkonyshock49133 жыл бұрын
Там keyUp используется, так что тут вернее будет "если не нажмут на пробел")
@TheTempterable3 жыл бұрын
@@evgenkonyshock4913 Еще вернее будет, если пробел был нажат, но в этот момент его отпустили
@archon7th3 жыл бұрын
запустил и забыл это Invoke(nameof(Method), magicNumber);
@gaitavr19923 жыл бұрын
Забудьте про этот метод. Его можно использовать только для прототипирования
@mimineko31003 жыл бұрын
@@gaitavr1992 ды ну? Это чего это? аргументы-то будут хоть какие-то? мало ли что кому-то он не нравится... но на нём всё отлично работает, адекватно и предсказуемо! в отличии от любых других альтернатив. Не нада так указывать людям, что им забывать, что не забывать, что применять и для чего. Это по меньшей мере, не корректно и самонадеяно. Единственный его минус - невозможность передачи параметров, но и это можно обойти.
@gaitavr19923 жыл бұрын
Я бы посмотрел на ваш высокооптимизированный код в котором не разберешься без 100 грамм. Это отсылка еще к одному комментарию про ненужность корутин и тасок, свой таймер и тд. 80 процентов кода не чувствительно к оптимизации, а работа в команде очень важна всегда, чтобы любой мог прочитать и изменить чужой код
@archon7th3 жыл бұрын
@@gaitavr1992 как по мне не сильно то и усложняющая. Достаточно помечать методы и не лепить их куда угодно при первой же возможности. А еще можно и к тестированию претензии предъявить ) Я так скажу, а "запутать колег" можно куда круче с помощь какого-нибудь визитера чем корутиной или инвоком.
@gaitavr19923 жыл бұрын
Если коллеги пишут в императивном стиле, а слово паттерн вызывает ассоциацию с синглтоном, то вопросов нет
@Ruslon-oc3pt3 жыл бұрын
1,4,5,2,3?
@alekseigolub43363 жыл бұрын
да, он в видео потом циферки поменял как оно будет.
@Tera-h7e2 ай бұрын
Человек сам до конца не понимает как на самом деле работает асинхронность и что где обрабатывается, и ещё учит людей 🤦
@gaitavr1992Ай бұрын
Ну-ка расскажи как все работает и чего я не знаю. Или может у тебя есть материалы посмотреть или почитать? Если нет, то толку от твоего комментария как от быка молока
@Tera-h7eАй бұрын
@gaitavr1992 отвечать конечно через месяц это умно. Хорошо, давай начнем с простого: где обрабатывается асинхронная операция? Этого в видео нет, хотя это очень важная информация. Чем отличается асинхронность от многопоточности и как это работает под капотом? Раз ты считаешь, что рассказал основное
@eugenebahmatsky25523 жыл бұрын
Круто удалять из листа во время фора! Проверяй код. Тебе надо тогда i не преращать, чтобы следующий элемент не проебать
@gaitavr19923 жыл бұрын
Первое предупреждение за мат, следом будет бан
@eugenebahmatsky25523 жыл бұрын
@@gaitavr1992 не стоит. Лучше я отпишусь
@YouSitePro3 жыл бұрын
@@gaitavr1992 , ))) Тебе указали на ошибку, в первую очередь. То, каким образом это сделано - уже второй вопрос.
@gaitavr19923 жыл бұрын
Для меня это первый вопрос, когда проявляется открытое неуважение - внятного ответа не будет
@igroteka902 жыл бұрын
2:38 - не читабельным, а читаемым. Давайте говорить по-русски.
@gaitavr19922 жыл бұрын
Давайте на вихід з цього каналу і розказуйте десь в іншому місці