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#Полиморфизм

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

  • @nostro92
    @nostro92 2 года назад +12

    Доброго времени суток. Хочу выразить свою благодарность. У вас качественный материал, хорошо подан, вкрапления мемчиков не дают заскучать. Просьба не забрасывать канал)

    • @bogdan9423
      @bogdan9423 9 месяцев назад

      Поддерживаю)

  • @slash7076
    @slash7076 2 года назад +23

    Эх, жаль что такой хороший канал так мало людей смотрит.

    • @user-tq7hb2dg5d
      @user-tq7hb2dg5d 2 года назад +6

      Какие люди? Ты глючишь? Тут только роботы)

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

      Время ещё придет)

    • @super207room
      @super207room 2 года назад +1

      Соглы)

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

      Я думаю может надо видео как-то более оригинально называть?

    • @WeLoveCreatingGames
      @WeLoveCreatingGames 2 года назад +1

      @@Hellscaner думаю тут ещё дело в частоте выпусков) Но у этого парня всё будет,но со временем, когда канал обрастёт материалом) Я был бы рад даже 2-5х минутным роликам,которые бы по нотации движка раскрывал,как и где применять функции юнити. Так как порой читаю и смотрю пример кода который сам мануал юнити дает и нифига не понятно,точнее понятно 30/70 информации,а смотришь ютубера он делает по другому,а работает так как ты представлял читая этот мануал...вообщем хочется расшифровку мануала для чайников)))

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

    КРУТОЙ РОЛИК. ДАВАЙ ЕЩЕ ПРО ИНТЕРФЕЙСЬІ!!

  • @seeyolater
    @seeyolater 2 года назад +1

    Канал просто жемчужина. Три дня бодался с интерфейсами, абстрактными классами и методами и именно ваш курс привел всю кашу в голове в порядок. Максимально благодарю❤

  • @user-mr8qj1nl6b
    @user-mr8qj1nl6b 2 года назад

    Большое спасибо бро, коротко, ясно, а самое главное без лишнего и понятными терминами

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

    отличный урок, благодарю

  • @alexkrat5562
    @alexkrat5562 2 года назад +1

    Уроки супер! Автор большущий молодчина!

  • @user-nw7xy6xk1w
    @user-nw7xy6xk1w 2 года назад +2

    посмотрел до 5 видео, понятно стало только тут)

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

    Шикарный канал, спасибо автору за такую качественную подачу информации!

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

    Чел, твой контент идеальный!

  • @user-fp1un8qs4h
    @user-fp1un8qs4h 4 месяца назад

    Молодец! Очень достойный материал для новичков. Жалко мне не подался такой контент 6-7 лет назад. Особенно правильно, что показан конкретный пример на unity.

  • @inzevision
    @inzevision 2 года назад +1

    Дякую, гарний контент :) Особливо сподобалось рішення з (out IDamageable damageable)

  • @user-ez8mf8nw1n
    @user-ez8mf8nw1n Год назад

    Спасибо, вы невероятно хорошо обьяснили. Лучший урок по интерфесам👍

  • @user-bj6pj2ue6v
    @user-bj6pj2ue6v 2 года назад +3

    Самое главное что ты можешь сделать чтобы у тебя была постоянная аудитория то не забрасывай канал

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

    Чётко, спасибо! Качество звука и видео на отличном уровне и вроде бы все понятно

  • @user-sj5zb8gb3t
    @user-sj5zb8gb3t 11 месяцев назад

    Годный разбор интерфейсов. Думаю надо наконец ими начать пользоваться)

  • @maxon17
    @maxon17 2 года назад +1

    Потрясающий канал, автор огромнейшее тебе спасибо!

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

    Очень хороший урок! Спасибо!:)

  • @qzex2719
    @qzex2719 2 года назад +3

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

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

    Блин, видео у тебя просто топ, не верится что у канала всего 2к подписчиков, продолжай в том же духе!!!! я кста нашел тебя в гугл поиске)

  • @Lemon-dh4fz
    @Lemon-dh4fz Год назад

    Лучшее объяснение. Моё почтение автору

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

    Это было хорошо . Третий видос подряд про интерфейсы и я понял их суть.

  • @rPbl3yH
    @rPbl3yH 2 года назад +1

    Хотим больше интерфейсов!

  • @user-ow1sd5mt6y
    @user-ow1sd5mt6y 8 месяцев назад

    Шикарное объяснение

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

    Больше интерфейсов и больше рейкаста) Ждём новые уроки)

  • @trytowinunity1445
    @trytowinunity1445 2 года назад +1

    Спасибо за информацию!) Первый колокольчик который я нажал))

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

    Круто, спасибо

  • @rsakutin
    @rsakutin 2 года назад +3

    Прикольно

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

    Очень годный урок.
    Мне очень понравилось как ты объясняешь, всё очень доходчиво и понятно, а более того интересно слушать.
    + Отдельное спасибо за ссылки на статьи.
    Буду под всеми просмотреными видео писать коммент и ставить лайк.
    Очень годно!

    • @-it394
      @-it394  2 года назад

      Спасибо!

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

      @@-it394 Так же если ты сделаешь такие же уроки про паттерны, то это было бы очень интересно. Особенно то как ты рассказываешь и открой кошелек для спонсирования, таких уроков какие ты делаешь очень мало и нужно их поддерживать.

    • @-it394
      @-it394  2 года назад

      @@mikki5923 В будущем обязательно сделаю такие уроки, когда буду уверен, что смогу правильно их донести) Профессионально я к сожалению не работал, поэтому могу не видеть или не понимать некоторых вещей, так что стараюсь разбирать то в чем уверен) Ну и параллельно расту с вами естественно. Так что все впереди) А со спонсорством еще придет время когда-нибудь)

  • @user-fw4zu1kd2z
    @user-fw4zu1kd2z 2 года назад +2

    Больше интерфейсов ) пж

  • @_goldmanv5925
    @_goldmanv5925 9 месяцев назад

    Автор, будут ли еще уроки. Сделано все супер. Может будет полноценный большой курс когда-нибудь?

  • @mugi1530
    @mugi1530 2 года назад +3

    Сделай видос про сериализацию, например в json, xml.

  • @slash7076
    @slash7076 2 года назад +1

    Классно.

  • @user-fw4zu1kd2z
    @user-fw4zu1kd2z 2 года назад +1

    Молодец )

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

    Супер качественные у тебя ролики. Очень доступно и понятно. А можно как-нибудь ролик по делегатам и ивентам. Никак не пойму как сделать нормальную реализацию так называемого "callback", когда нужно отслеживать завершение какого-либо действия. Спасибо

    • @-it394
      @-it394  2 года назад +1

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

  • @slavlendstudio
    @slavlendstudio 9 месяцев назад

    Круто

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

    Годно

  • @TFM2024
    @TFM2024 2 года назад +1

    Давай видосы почаще, и еще, такой вопрос. Где можно найи нормальный, бесплатный курс на юнити. А то учиться по кусочкам из ютуба и гугла так себе.

    • @-it394
      @-it394  2 года назад +1

      На самом деле я и платных то нормальных курсов не знаю, а уж бесплатных мне кажется и нет совсем( В целом можно заглянуть на канал simple code там по документации идет рассмотрение всех аспектов языка, но без примеров практических особо:(

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

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

    • @-it394
      @-it394  2 года назад +1

      для какой цели это необходимо? Просто именно срабатывание OnEnable вроде ты не узнаешь напрямую, но в зависимости от того зачем это нужно можно что-нибудь придумать. Если надо выполнять допустим OnEnable в скрипте дочернего объекта после родителя (по какой-то причине этого не выполняется), то прямо в Unity можно назначить очередность выполнения скриптов

    • @rusytop4910
      @rusytop4910 2 года назад +1

      @@-it394 привет, я просто хотел генерировать рандомно цвет у объекта. Объект этот всегда включен, а вот его patent.parent включается и выключается, вот когда включается надо было менять цвет.
      Я просто у объекта написал OnEnable решил проверить, и оно работало.
      Видимо когда у родителя срабатывает эта функция она срабатывает и у дочерних

    • @-it394
      @-it394  2 года назад +1

      @@rusytop4910 Просто при деактивации родителя все дочерние объекты так же деактивируются, ну и при включении аналогично)

  • @WeLoveCreatingGames
    @WeLoveCreatingGames 2 года назад +1

    Привет! Классные ролики! А когда будут продолжение?
    На самом деле хотелось поподробнее узнать про чаректор контроллер и риджибади,а если касаться последнего,то подробнее раскрыть функции его,как задавать поворот плавный на месте, как у танков,или наоборот резки ровно на 90 градусов,как задать движение по направлению,куда смотрит объект. У меня просто с этим возникли проблемы,а на российском ютубе не та информация или итог,что показывают немного не тот какой хотелось бы получить.
    Я разворачиваю объект с помощью клавиш,он у меня риджибади,но потом когда я нажимаю клавишу движения,он двигается не в ту сторону куда смотрит. Не понимаю как сделать так,чтобы он двигался туда куда смотрит,это ведь получается нужно разворачивать объект в глобальных координатах? и интересно,как сделать выстрелы пулей,выстрелы снарядов по траектории или гарпуна с "веревкой",как подбирать обратно такие объекты(гарпун) очень жду выпусков! и желаю поскорее разобраться с делами дома и начать нас радовать роликами!)

    • @-it394
      @-it394  2 года назад +1

      Спасибо! Продолжение будет в феврале) К сожалению зимняя сессия довольно длинная, да я ещё и короновирусом переболел, поэтому часть сессии переносится на февраль((( Так что как все сдам, так и продолжу выпускать ролики✊

    • @-it394
      @-it394  2 года назад +1

      Кстати хорошие идеи для роликов, спасибо! Думаю обязательно что-то сделаю)

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

      @@-it394 здоровья! Не болей! И удачи на сессии! Буду тебя ругать,чтоб сдал!)
      И хитрый приём) Не пилить ролики,чтобы во время сессии больше народу ругали на хорошую оценку!))😁😉
      А так да! Было бы классно получать расшифровку документации юнити с примерами🤩🤩🤩

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

    Получается интерфейс просто говорит нам что должно быть в классе? Типа если какой то метод или свойство повторяется в нескольких классах. то мы выносим их в интерфейс. и он это как подсказка что эти штуки нужно реализовать? Правильно я понял?

    • @-it394
      @-it394  2 года назад +1

      В целом да, если есть какое - то общее поведение у разных классов или допустим ты создаешь для класса поведение и понимаешь, что оно у тебя может использоваться в будущем еще где-то, то можно вынести это в интерфейс. Кроме того интерфейс позволяет инкапсулировать поведение, как было в примере на Unity у тебя в классе может быть прописано все что угодно, но исполняющему коду в Shooter неважно что там находиться, он работает с ним лишь на уровне IDamageable. Это минимизирует связность кода

    • @HINCO38
      @HINCO38 2 года назад +3

      Можешь посмотреть ещё ролик кодманки на эту тему m.ruclips.net/video/MZOrGXk4XFI/видео.html

  • @HeyWhoTheFuckAreYou
    @HeyWhoTheFuckAreYou 2 года назад +1

    Хотел бы узнать по поводу кое какого момента, у вас в конце в методе Update вы создаёте переменные ray, hit. По сути Update это цикл и на каждой итерации цикла будут создаваться эти переменные, на сколько будет целесообразнее вынести эти переменные в момент инициализации скрипта со всеми полями или профита от этого никакого не будет?

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

      Профита почти не будет, т.к. ссылки на классы в c# удаляются не сразу.
      Хотя если у тебя лям лучей за кадр, то смысл возможно есть.

    • @-it394
      @-it394  2 года назад +1

      Профита не будет особо. В целом не надо сильно бояться делать что-то в Update, понятное дело, что нужно стараться выносить все из него по возможности, но если нужно, что бы что-то действительно постоянно обновлялось, то просто пытаемся избавляться от тяжелых операций как например поиск по тегу или получение компонента и суем в Update

  • @artemvah2210
    @artemvah2210 2 года назад +1

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

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

      ищешь всех монобехов (при загрузке сцены, к примеру), тусуешь по типам (выбираешь нужный интерфейс), и через класс, где у тебя это все хранится можешь передавать всем "сообщения" по методам интерфейса

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

    3:42 в чем разница тогда между наследованием и реализацией? как это различается через синтаксис c# ? :)

    • @Hellscaner
      @Hellscaner 9 месяцев назад +2

      Если простыми словами попытаться объяснить, то наследование нужно использовать если у тебя есть объекты одного типа (пример есть базовый класс "враг", и его наследники орк, эльф и тд. Каждый из них может получать урон, но ведь его могут получать и например здания, а это другой класс который тоже может наследоваться). И тогда подойдут именно интерфейсы.

    • @UnityFAN_unity
      @UnityFAN_unity 9 месяцев назад

      @@Hellscaner не это вопрос с собеседования. Ответ - разницы в контексте c# нету)

  • @user-ht1uh2xf6t
    @user-ht1uh2xf6t 11 месяцев назад

    Сэ ПА Си БА!

  • @bogdan9423
    @bogdan9423 9 месяцев назад +1

    Может кто-нибудь подсказать почему у меня этот 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
      @bogdan9423 9 месяцев назад

      И ещё, спасибо большое автору за видео, очень интересно и хорошо объяснено, хотя и не до конца пока всё понятно👍 А сколько времени ты учился, чтобы так уметь?)😅

    • @user-it9mg3ge6p
      @user-it9mg3ge6p 18 дней назад

      @@bogdan9423 из за этой строки:
      targetPoint.position = hit.point;

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

    почему в начале пишется SerializeFiled?

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

      Что бы приватные поля были видны в инспекторе

    • @-it394
      @-it394  2 года назад

      Мы это делаем что бы приватные поля были видны в инспекторе, т.е. мы могли бы их задавать из инспектора Unity, но при это с точки зрения кода они бы оставались приватными

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

    наконц то я понял

  • @slash7076
    @slash7076 2 года назад +1

    А где перегрузка?)

    • @-it394
      @-it394  2 года назад

      Ну уж с перегрузкой как-нибудь можно разобраться самим))

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

    Единственное хорошее объяснение что такое интерфейс!👍 в остальных источниках путают причину и следствие 🤦‍♂️ таким образом интерфейс нам нужен для того, чтобы какой либо класс мог взаимодействовать с другими классами без необходимости прописывать объекты этих классов. Иначе как в данном примере нам пришлось бы прописывать каждый объект с которым взаимодействует класс shooter и если через пару тройку обновлений мы введем в игру еще какой нибудь новый класс то и его надо прописывать сюда, а если таких enemy десятки то код становится однотипным и будет целая куча объектов этого класса с одинаковыми методами. А так мы цепляем интерфейс на нужный нам класс, прописываем поведение и уже класс шутер определяет есть ли у того класса интерфейс взаимодействия и если он есть то shooter может проводить над ним установленное интерфейсом действие. При этом реализация отдана в сам класс-наследник интерфейса чтоб избежать ромба наследования и по сути определения конкретного выполнения этого действия. Так например при взаимодействии shooter и orc орк умирает с каким нибудь эффектом или словами, а при взаимодействии с wall стена должна рассыпаться молча😅, а стена у которой нет интерфейса будет стоять как стояла т.к. shooter с ней не будет никак взаимодействовать в рамках установленного интерфейса, как то так?🤔

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

      Ну или как пульт и телевизор: если у телевизора есть интерфейс взаимодействия с пультом то он будет выполнять действия, если пульт от другого телевизора(сигнатура другая) или телевизор вообще не имеет интерфейс взаимодействия с пультом то и происходить ничего не будет. Или же изначально телевизор проектировался без пульта т.к. о такой возможности тогда небыло известно но тут человечество сделало рывок в науке и смогло изобрести дистанционное управление и как быть этому телевизору если у него изначально такой функции небыло, а потребители уже требуют, чтоб он был с пультом? Приделать ему коробочку со смарт-тв у которой уже предусмотрен пульт управления с возможностью запускать этот телевизор без особой необходимости изменять внутрянку или вообще переделывать телевизор заново

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

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

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

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

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

    Все бы хорошо, но в процессе объяснения темы, написания или разъяснения кода эти всплывающие, клацающие детские мемчики сбивают с толку, постоянно приходится читать что там написано, а там какая-то шляпа типо "смешная". Нужно по несколько раз пересматривать, а то и начинать искать другие видео без мемов, вставок и всех этих свистелок-перделок. Автору спасибо, но БЛИН! Подача - ужас эпилептика.

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

    Урок отстой, он походу для профессионалов

    • @-it394
      @-it394  2 года назад +3

      Это уже 8-я часть серии уроков, так что советую посмотреть предыдущее, что бы было понятнее. Однако если вы только только начали изучать программирование, то это будет тяжело понять сразу

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

      Проффесионали и так это знают )