C# Интерфейсы простым языком с примерами в Unity! Уроки по C# (ч.8)
HTML-код
- Опубликовано: 22 май 2024
- 📝Всем, привет! Сегодня мы продолжим серию уроков по C# для начинающих программистов - "Простым языком о сложных вещах". В данном видео мы разберем довольно объемную и сложную тему - интерфейсы! В наглядной и доступной форме разберем особенности данной темы и обязательно посмотрим на примеры в Unity, что бы лучше прочувствовать ее. Посмотрим на полиморфизм в исполнении с интерфейсами, поймем когда их нужно применять и чем же они отличаются от абстрактных классов. Приятного просмотра!
🕒Тайм-коды:
➜ 00:00 - Вступление
➜ 00:20 - Что из себя представляет интерфейс?
➜ 00:52 - Разбираем интерфейсы в консоли VisualStudio
➜ 03:34 - Чем отличаются абстрактные классы от интерфейсов и когда их применять?
➜ 03:58 - Применяем интерфейсы в Unity!
➜ 09:29 - Заключение
⚡️⚡️⚡️ Полезные ссылки ⚡️⚡️⚡️
🔎 • С# КЛАССЫ с ПРИМЕРАМИ ... - ссылка на плейлист с уроками по C#
🔎 metanit.com/sharp/tutorial/3.... - первая статья по интерфейсам для изучения
🔎 highload.today/zachem-v-c-nuz... - вторая статья для изучения
🔎 • C# ПОЛИМОРФИЗМ простым... - ссылка на урок по полиморфизму в C#
🔎 • Создание персонажа в U... - ссылка на плейлист по созданию персонажа
🔎 • Вектора в Unity. Прост... - ссылка на урок по векторам в Unity
🔎 • Вектора в Unity на пра... - ссылка на вторую часть урока по векторам
🔥🔥🔥 На этом канале вы найдете множество уроков по Unity и C#, а так же различных видео на игровую тематику, так что не стесняйтесь, заглядывайте на канал и вы обязательно найдете что-то по душе!🔥🔥🔥
🎧🎧🎧 Музыка в видео 🎧🎧🎧
➜ Effervescence - ZAYFALL
➜ Will You Be Mine (feat. Karemann)
➜ Soave - Vendredi
➜ Teen Party (feat. Vendredi) - Broke in Summer
#Интерфейсы#ЯковлевИлья#Unity3D#Полиморфизм
Доброго времени суток. Хочу выразить свою благодарность. У вас качественный материал, хорошо подан, вкрапления мемчиков не дают заскучать. Просьба не забрасывать канал)
Поддерживаю)
Эх, жаль что такой хороший канал так мало людей смотрит.
Какие люди? Ты глючишь? Тут только роботы)
Время ещё придет)
Соглы)
Я думаю может надо видео как-то более оригинально называть?
@@Hellscaner думаю тут ещё дело в частоте выпусков) Но у этого парня всё будет,но со временем, когда канал обрастёт материалом) Я был бы рад даже 2-5х минутным роликам,которые бы по нотации движка раскрывал,как и где применять функции юнити. Так как порой читаю и смотрю пример кода который сам мануал юнити дает и нифига не понятно,точнее понятно 30/70 информации,а смотришь ютубера он делает по другому,а работает так как ты представлял читая этот мануал...вообщем хочется расшифровку мануала для чайников)))
КРУТОЙ РОЛИК. ДАВАЙ ЕЩЕ ПРО ИНТЕРФЕЙСЬІ!!
Канал просто жемчужина. Три дня бодался с интерфейсами, абстрактными классами и методами и именно ваш курс привел всю кашу в голове в порядок. Максимально благодарю❤
Большое спасибо бро, коротко, ясно, а самое главное без лишнего и понятными терминами
отличный урок, благодарю
Уроки супер! Автор большущий молодчина!
посмотрел до 5 видео, понятно стало только тут)
Шикарный канал, спасибо автору за такую качественную подачу информации!
Чел, твой контент идеальный!
Молодец! Очень достойный материал для новичков. Жалко мне не подался такой контент 6-7 лет назад. Особенно правильно, что показан конкретный пример на unity.
Дякую, гарний контент :) Особливо сподобалось рішення з (out IDamageable damageable)
Спасибо, вы невероятно хорошо обьяснили. Лучший урок по интерфесам👍
Самое главное что ты можешь сделать чтобы у тебя была постоянная аудитория то не забрасывай канал
Чётко, спасибо! Качество звука и видео на отличном уровне и вроде бы все понятно
Годный разбор интерфейсов. Думаю надо наконец ими начать пользоваться)
Потрясающий канал, автор огромнейшее тебе спасибо!
Очень хороший урок! Спасибо!:)
Спасибо твоим урокам. Только благодаря таким как ты, можно самому дома учиться и сменить род деятельности кардинально.
А самое важное, что можно начать создавать свои проекты мечты)
Блин, видео у тебя просто топ, не верится что у канала всего 2к подписчиков, продолжай в том же духе!!!! я кста нашел тебя в гугл поиске)
Лучшее объяснение. Моё почтение автору
Это было хорошо . Третий видос подряд про интерфейсы и я понял их суть.
Хотим больше интерфейсов!
Шикарное объяснение
Больше интерфейсов и больше рейкаста) Ждём новые уроки)
Спасибо за информацию!) Первый колокольчик который я нажал))
Круто, спасибо
Прикольно
Очень годный урок.
Мне очень понравилось как ты объясняешь, всё очень доходчиво и понятно, а более того интересно слушать.
+ Отдельное спасибо за ссылки на статьи.
Буду под всеми просмотреными видео писать коммент и ставить лайк.
Очень годно!
Спасибо!
@@-it394 Так же если ты сделаешь такие же уроки про паттерны, то это было бы очень интересно. Особенно то как ты рассказываешь и открой кошелек для спонсирования, таких уроков какие ты делаешь очень мало и нужно их поддерживать.
@@mikki5923 В будущем обязательно сделаю такие уроки, когда буду уверен, что смогу правильно их донести) Профессионально я к сожалению не работал, поэтому могу не видеть или не понимать некоторых вещей, так что стараюсь разбирать то в чем уверен) Ну и параллельно расту с вами естественно. Так что все впереди) А со спонсорством еще придет время когда-нибудь)
Больше интерфейсов ) пж
Автор, будут ли еще уроки. Сделано все супер. Может будет полноценный большой курс когда-нибудь?
Сделай видос про сериализацию, например в json, xml.
Классно.
Молодец )
Супер качественные у тебя ролики. Очень доступно и понятно. А можно как-нибудь ролик по делегатам и ивентам. Никак не пойму как сделать нормальную реализацию так называемого "callback", когда нужно отслеживать завершение какого-либо действия. Спасибо
Готовлю как раз ролик по делегатам и ивентам) Но боюсь в рамках одного ролика рассмотреть все не получится, так что начнём с основ а там посмотрим)
Круто
Годно
Давай видосы почаще, и еще, такой вопрос. Где можно найи нормальный, бесплатный курс на юнити. А то учиться по кусочкам из ютуба и гугла так себе.
На самом деле я и платных то нормальных курсов не знаю, а уж бесплатных мне кажется и нет совсем( В целом можно заглянуть на канал simple code там по документации идет рассмотрение всех аспектов языка, но без примеров практических особо:(
Привет, есть такой вопрос, не по теме этого видео.
как узнать в скрипте дочернего объекта когда срабатывает OnEnable у родителя ?
для какой цели это необходимо? Просто именно срабатывание OnEnable вроде ты не узнаешь напрямую, но в зависимости от того зачем это нужно можно что-нибудь придумать. Если надо выполнять допустим OnEnable в скрипте дочернего объекта после родителя (по какой-то причине этого не выполняется), то прямо в Unity можно назначить очередность выполнения скриптов
@@-it394 привет, я просто хотел генерировать рандомно цвет у объекта. Объект этот всегда включен, а вот его patent.parent включается и выключается, вот когда включается надо было менять цвет.
Я просто у объекта написал OnEnable решил проверить, и оно работало.
Видимо когда у родителя срабатывает эта функция она срабатывает и у дочерних
@@rusytop4910 Просто при деактивации родителя все дочерние объекты так же деактивируются, ну и при включении аналогично)
Привет! Классные ролики! А когда будут продолжение?
На самом деле хотелось поподробнее узнать про чаректор контроллер и риджибади,а если касаться последнего,то подробнее раскрыть функции его,как задавать поворот плавный на месте, как у танков,или наоборот резки ровно на 90 градусов,как задать движение по направлению,куда смотрит объект. У меня просто с этим возникли проблемы,а на российском ютубе не та информация или итог,что показывают немного не тот какой хотелось бы получить.
Я разворачиваю объект с помощью клавиш,он у меня риджибади,но потом когда я нажимаю клавишу движения,он двигается не в ту сторону куда смотрит. Не понимаю как сделать так,чтобы он двигался туда куда смотрит,это ведь получается нужно разворачивать объект в глобальных координатах? и интересно,как сделать выстрелы пулей,выстрелы снарядов по траектории или гарпуна с "веревкой",как подбирать обратно такие объекты(гарпун) очень жду выпусков! и желаю поскорее разобраться с делами дома и начать нас радовать роликами!)
Спасибо! Продолжение будет в феврале) К сожалению зимняя сессия довольно длинная, да я ещё и короновирусом переболел, поэтому часть сессии переносится на февраль((( Так что как все сдам, так и продолжу выпускать ролики✊
Кстати хорошие идеи для роликов, спасибо! Думаю обязательно что-то сделаю)
@@-it394 здоровья! Не болей! И удачи на сессии! Буду тебя ругать,чтоб сдал!)
И хитрый приём) Не пилить ролики,чтобы во время сессии больше народу ругали на хорошую оценку!))😁😉
А так да! Было бы классно получать расшифровку документации юнити с примерами🤩🤩🤩
Получается интерфейс просто говорит нам что должно быть в классе? Типа если какой то метод или свойство повторяется в нескольких классах. то мы выносим их в интерфейс. и он это как подсказка что эти штуки нужно реализовать? Правильно я понял?
В целом да, если есть какое - то общее поведение у разных классов или допустим ты создаешь для класса поведение и понимаешь, что оно у тебя может использоваться в будущем еще где-то, то можно вынести это в интерфейс. Кроме того интерфейс позволяет инкапсулировать поведение, как было в примере на Unity у тебя в классе может быть прописано все что угодно, но исполняющему коду в Shooter неважно что там находиться, он работает с ним лишь на уровне IDamageable. Это минимизирует связность кода
Можешь посмотреть ещё ролик кодманки на эту тему m.ruclips.net/video/MZOrGXk4XFI/видео.html
Хотел бы узнать по поводу кое какого момента, у вас в конце в методе Update вы создаёте переменные ray, hit. По сути Update это цикл и на каждой итерации цикла будут создаваться эти переменные, на сколько будет целесообразнее вынести эти переменные в момент инициализации скрипта со всеми полями или профита от этого никакого не будет?
Профита почти не будет, т.к. ссылки на классы в c# удаляются не сразу.
Хотя если у тебя лям лучей за кадр, то смысл возможно есть.
Профита не будет особо. В целом не надо сильно бояться делать что-то в Update, понятное дело, что нужно стараться выносить все из него по возможности, но если нужно, что бы что-то действительно постоянно обновлялось, то просто пытаемся избавляться от тяжелых операций как например поиск по тегу или получение компонента и суем в Update
А как сделать интерфейс событием, чтобы всем, у кого есть данный интерфейс, передать сообщения?
ищешь всех монобехов (при загрузке сцены, к примеру), тусуешь по типам (выбираешь нужный интерфейс), и через класс, где у тебя это все хранится можешь передавать всем "сообщения" по методам интерфейса
3:42 в чем разница тогда между наследованием и реализацией? как это различается через синтаксис c# ? :)
Если простыми словами попытаться объяснить, то наследование нужно использовать если у тебя есть объекты одного типа (пример есть базовый класс "враг", и его наследники орк, эльф и тд. Каждый из них может получать урон, но ведь его могут получать и например здания, а это другой класс который тоже может наследоваться). И тогда подойдут именно интерфейсы.
@@Hellscaner не это вопрос с собеседования. Ответ - разницы в контексте c# нету)
Сэ ПА Си БА!
Может кто-нибудь подсказать почему у меня этот point, который следит за мышкой, активируется только тогда, когда, я навожу её на один из предметов(врага, башню или стену)? А когда убираю с них мышь, они просто там и остаются, пока я не наведу её на другой объект, тогда она будет двигаться уже в его пределах.
Написал, вроде как всё как на видео, но работает как-то не так
Вот код:
using Assets;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shooter : MonoBehaviour
{
[SerializeField] private Transform targetPoint;
private Camera cam;
[SerializeField] private int damage;
private void Awake()
{
cam = Camera.main;
}
private void Update()
{
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit))
{
targetPoint.position = hit.point;
if (Input.GetKeyDown(KeyCode.Mouse0) &&
hit.collider.TryGetComponent(out IDamageable damageable))
{
damageable.ApplyDamage(damage);
}
}
}
}
И ещё, спасибо большое автору за видео, очень интересно и хорошо объяснено, хотя и не до конца пока всё понятно👍 А сколько времени ты учился, чтобы так уметь?)😅
@@bogdan9423 из за этой строки:
targetPoint.position = hit.point;
почему в начале пишется SerializeFiled?
Что бы приватные поля были видны в инспекторе
Мы это делаем что бы приватные поля были видны в инспекторе, т.е. мы могли бы их задавать из инспектора Unity, но при это с точки зрения кода они бы оставались приватными
наконц то я понял
А где перегрузка?)
Ну уж с перегрузкой как-нибудь можно разобраться самим))
Единственное хорошее объяснение что такое интерфейс!👍 в остальных источниках путают причину и следствие 🤦♂️ таким образом интерфейс нам нужен для того, чтобы какой либо класс мог взаимодействовать с другими классами без необходимости прописывать объекты этих классов. Иначе как в данном примере нам пришлось бы прописывать каждый объект с которым взаимодействует класс shooter и если через пару тройку обновлений мы введем в игру еще какой нибудь новый класс то и его надо прописывать сюда, а если таких enemy десятки то код становится однотипным и будет целая куча объектов этого класса с одинаковыми методами. А так мы цепляем интерфейс на нужный нам класс, прописываем поведение и уже класс шутер определяет есть ли у того класса интерфейс взаимодействия и если он есть то shooter может проводить над ним установленное интерфейсом действие. При этом реализация отдана в сам класс-наследник интерфейса чтоб избежать ромба наследования и по сути определения конкретного выполнения этого действия. Так например при взаимодействии shooter и orc орк умирает с каким нибудь эффектом или словами, а при взаимодействии с wall стена должна рассыпаться молча😅, а стена у которой нет интерфейса будет стоять как стояла т.к. shooter с ней не будет никак взаимодействовать в рамках установленного интерфейса, как то так?🤔
Ну или как пульт и телевизор: если у телевизора есть интерфейс взаимодействия с пультом то он будет выполнять действия, если пульт от другого телевизора(сигнатура другая) или телевизор вообще не имеет интерфейс взаимодействия с пультом то и происходить ничего не будет. Или же изначально телевизор проектировался без пульта т.к. о такой возможности тогда небыло известно но тут человечество сделало рывок в науке и смогло изобрести дистанционное управление и как быть этому телевизору если у него изначально такой функции небыло, а потребители уже требуют, чтоб он был с пультом? Приделать ему коробочку со смарт-тв у которой уже предусмотрен пульт управления с возможностью запускать этот телевизор без особой необходимости изменять внутрянку или вообще переделывать телевизор заново
Эти выскакивающие со звуком картинки лично меня отвлекают. Да любой человек, если у него перед носом махать руками и щелкать пальцами, будет отвлекаться и потеряет понимание темы.
Не совсем понял для чего это нужно, получается вы создали разные методы и это можно было сделать без интерфейсов
Все бы хорошо, но в процессе объяснения темы, написания или разъяснения кода эти всплывающие, клацающие детские мемчики сбивают с толку, постоянно приходится читать что там написано, а там какая-то шляпа типо "смешная". Нужно по несколько раз пересматривать, а то и начинать искать другие видео без мемов, вставок и всех этих свистелок-перделок. Автору спасибо, но БЛИН! Подача - ужас эпилептика.
Урок отстой, он походу для профессионалов
Это уже 8-я часть серии уроков, так что советую посмотреть предыдущее, что бы было понятнее. Однако если вы только только начали изучать программирование, то это будет тяжело понять сразу
Проффесионали и так это знают )