События (Events) в C#. Рассказываю на примерах в Unity3d, как пользоваться
2021 ж. 31 Қаң.
17 304 Рет қаралды
Поддержи канал, бро!
paypal.me/gamedevlavka - мир
boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам использования событий (Event) в разработке игр.
Урок по Unity3D, однако именно эта тема подойдет для всех начинающих разработчиков, программирующих на C#.
Подписуйся на канал в телеге, или на твиттер, там я публикую коротенькие типсы и практики, которые помогут писать код лучше, понятнее и эффективнее:
Telegram: t.me/gamedevlavka
Twitter: / gamedevlavka
Понравился ваш канал, доступно для новичков о важных понятиях с примерами. Спасибо за видео и отзывчивость в комментариях.
Спасибо за видео , хорошо понял что такое событие и как они работают , правда немного непонятно как их реализовать красиво , тестовый код всё же как ты сам сказал не является хорошим примером . Но самое главное что я понял суть и готов дальше разбираться с этим вопросом , так как события решают пару важных проблем в моём коде . Ещё раз спасибо 💛
Спустя 3 месяца изучения юнити начал постепенно перекатываться на ECS, но вот всё никак не мог понять события, даже этот ролик третий раз смотрю (сейчас уже для закрепления). И виной всему использование слова "подписка", которое воспринимается, из-за соцсетей, как что-то сложное и облачное, хотя по факту это просто присоединение метода класса к делегату другого класса. А этот другой класс запускает этот делегат внутри своего какого-то метода (или дистанционно). Юнитеки, походу, это поняли, и потому в своих юнитиэвентах используют понятие listener, а не subscriber. В любом случае, благодарю за видео, наконец-то до меня дошло
Конечно, чем делать такие примеры в вакууме и говорить неделайте так никогда, лучше было бы на примере простенькой игры показать несколько парадигм, но так как надо, в стиле бест практисис.
приставочка Event в конце по какой нотации было?
Блин кайф спасибо)))
При всем уважении к автору и его труду, ну реально про события 2мин в начале 4:41 (создание) и 3 мин в конце 17:30 (подписывание), все остальное время пытаешься понять что же происходит неужели эта вся система для событий нужна ... и такой неее ну на хер )) ни про подписывание ни про отписывание ни слова ... где....когда ... как.. почему ... Ну ничего ... Тяжело в учение легко в бою как говориться )))В любом случае 👍 за труды.
не в обиду автору, у него много полезного на канале, но тут да, соглашусь)
В какой момент в данном случае нужно отписываться от события?
Зачем при объявлении делегатов указываются имена параметров? Это для случая, когда мы производим вызов функции с именованными параметрами? Больше ведь по-идее это нигде не нужно, достаточно знать типы параметров и их порядок.
Так. А ты добавь рубрику о том, где будешь переписывать свой "говнокод". Чтобы те, кто менее знаком с шарпом, хотя бы что-то понимали по тематике видео. А те, кто знают поболее - понимают, видели хорошие практики написания кода. И так же их можешь в превьюшке отмечать цветом заставки, иконкой, ярлыком или еще как. Будет удобно и новичкам и чуть более опытным, чем новичок.
Это будет немного ненужная рубрика, перепись говнокода называется рефакторингом, автор просто показывает и рассказывает про события, это бессмысленно снимать видео о том, как рефакторить код из урока. Рефакторинг интересная тема, можешь почитать книгу Мартина Фаулера по, рефакторингу
Привет. Спасибо за курс. Он очень хороший даже супер. А можно проект на гитхаб залить. Многих людей будет удобно по тыкать, изучать что как
Проста там видел папки для каждого урока и думал о будет на что по тыкать но не нашёл.
Ну собственно вот, я, менее знакомый с шарпом. Получается, что в каждом подписчике должна быть ссылка на объект-генератор событий? Или есть более удачные решения?
Да, каждый подписчики должен знать на кого подписывается. Но это связь односторонняя. Подписчики имеют ссылку, а тот на кого подписываются не знает, кто на него подписан. В этом весь смысл ивентов.
Есть вариант связывания через ScriptableObject Event
Зачем рассматривать эвенты без времени? Это все можно сделать и по другому без делегатов и без эвентов. Эвент ведь нужен для однократного выполнения запроса в строке где он будет вызван, а не в той строке откуда отправлен. типа чтобы не было случая когда у тебя произошло 10 вызовов функции в одной части когда которые должны передавать информацию в ту часть кода где произошел только один цикл. Типа событие это какой то запрос до момента прочтения, и сколько раз бы ты его не вызвал он примется 1 раз и будет обнулëн. вот к примеру, какая разница какому то коду, произошло событие десять раз или один? как мы это потом определим?
у тебя "народный" RIder или лиц?
Все руки не доходят взять лицензию. Когда-то скачал народный, и до сих пор стоит, не беспокоит
а нужно ли отписываться от событий?
Обязательно! Скажу так: это в некоторых случаях не требуется, но лучше отписаться, чем не отписаться. Т.к. подписчики может быть в какой-то момент быть уничтожен, и тот кто посылает уведомление будет ссылаться на Null, и вылетит ошибка. Будешь гадать, что произошло. А если будешь всегда отписываться, такой проблемы никогда не будет.
@@gamedevlavka может быть я ошибаюсь, но вроде же сборщик мусора как раз не удаляет объекты, на которые есть активная ссылка (он их вроде в принципе не видит). то есть если не отписаться, они останутся висеть в памяти, вызывая утечку памяти
@@nikita8291 про утечку памяти и про сборщик все верно! Я имел ввиду объект может быть уничтожен (игровой), а ссылка на него (скрипт на нем), останется и она будет теперь ссылаться на null
@@gamedevlavka понятно, спасибо)
Надо было еще хоть пару слов про делегаты рассказать.
блин даже ide показывает что эти this лишние
var тоже лишние) смотрю на это и думаю, что я идиот, чего то не понимаю) но на деле - это лишь стиль кода автора ролика)
Всё что нужно знать про события,, делегаты и действия сказано не было. 99% ролика построение глупой модели чтобы вывести 3 сообщения. Печалька.
Чел на протяжении всего видео заявляет, что не смотрите на этот код, так делать не надо и т.п. А для чего тогда, в принципе, смотреть твоё видео? Показывай сразу как правильно делать, иначе легче перейти на уроки других блогеров, которые изначально делают правильно!
Человек пишет про чистый код, Поля публичные с маленькой, сразу видео закрыл.
Microsoft рекомендует использовать PascalCase для публичных полей - это верно. И для .NET это справедливо. Но мы работаем в Unity, где внутренние библиотеки по тем или иным причинам написаны с camelCase для публичных полей и свойств. Мне неизвестно причины такого решения, но я решил, что мой код внутри проектов Unity будет придерживаться тех же правил, что и сами разработчики Unity
@@gamedevlavka Юнити школьники за дошик писали, сейчас пытаются это дерьмо разгребсти до сих пор не могут, ненужно по их правилам работать есть стандарты майкрософта, которыми пользуются в каждой не подпольной студии, нотации не только из головы взяты. Свойства с маленькой буквы это конечно совсем нонсенс как метод может быть с маленькой буквы, мы что на джаве пишем.
@@Pravda-bw3tj, как будто рома сакутин с левого аккаунта написал)