Принципы ООП в C# в Unity. Рассказываю на примерах, как пользоваться

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

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

  • @ДенисАньенко
    @ДенисАньенко 3 года назад +51

    Впервые произошла такая ситуация, когда 20-минутный урок смотришь будто он от силы идет 5-7 минут. Очень интересный урок, без воды, с нормальной речью и без растягиваний. За 20 минут рассказано то что некоторые умудряются растянуть на час. Объяснение очень понятное. Нет ничего лишнего, только код нужный для урока. Никакого копирования из других скриптов и т.д. Это один из немногих уроков где с 1-2 просмотра ты понимаешь о чём идет речь и без проблем ориентируешься в коде, который написан в примере. Плюс ко всему, с таким примером, его можно без проблем повторить, даже если видео уже закрыто.
    Очень печально что такие качественные уроки набирают так мало просмотров. Думаю канал стоит развивать, и делать что-то вроде рекламы. Потому что урок действительно хороший. А с таким уровнем качества, канал ждёт светлое будущее.

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

      Я только начал делать уроки (относительно), поэтому все еще впереди). Пока уроки выходят редко, т.к. нет времени на монтаж, но когда канал начнет приносить какие-никакие деньги - то первое, что будет сделано - монтаж уйдет на аутсорс, и количество видео увеличится :)
      ПОДДЕРЖАТЬ проект можно здесь ➔ www.tinkoff.ru/sl/44cyJfImuhT​

  • @Likipufenger
    @Likipufenger 3 года назад +21

    Ходит легенда что если посмотреть все видео этого автора, можно стать middle unity c# разработчиком

  • @rippershorts-wp3hy
    @rippershorts-wp3hy 7 дней назад +1

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

  • @ТатьянаГурина-с9б
    @ТатьянаГурина-с9б 5 месяцев назад +3

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

  • @Невходить-н2н
    @Невходить-н2н 3 года назад +8

    Я так рад, что этот видос мне выскочил в реках. Спасибо огромное

  • @uiriigol5651
    @uiriigol5651 3 года назад +24

    Спасибо большое. Урок что нужно. Потратил неделю на изучение данной темы. Много где смотрел. Здесь раза 3-4 нужно посмотреть, вникнуть и уже будет понятна логика. Вообщем за неделю изучения материала, именно данное видео позволило мне сдвинуться с мертвой точки, спасибо.

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

      Здраствуйте можно спрлсить вы уже стали програмистом и сколько лет уже работаете?😮

  • @Дмитрий-п9ь7щ
    @Дмитрий-п9ь7щ 2 месяца назад +1

    Огромное спасибо за объяснение простым языком абстрактных тем) лайк, подписка

  • @CiTRyS32
    @CiTRyS32 2 года назад +5

    Ощущение, будто в куче компоста нашёл рабочие ролексы, офигенные уроки, спасибо

  • @СтаниславГендель
    @СтаниславГендель 3 года назад +4

    Самое толковое и простое объяснение интерфейсов, которое я встречал. Спасибо тебе большое за такой классный материал!)

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

    Большое тебе спасибо за урок. Ты - талантище, умеешь обьяснять так понятно и так быстро... ну без воды, после ролика, у меня такое ощущение будто я в своем познании настолько преисполнился.... да и дикция у тебя отличная, даже если поставить ролик на 2х скорость то все прекрасно понятно. Знай ты получил от меня заслуженый лайк, хоть их я ставлю не часто, в основном дабы потом можно было найти видео, но тут чисто в знак благодарности. Еще раз спасибо!

  • @user-hp2cg6px8c
    @user-hp2cg6px8c 3 года назад +4

    Топовое видео по объяснению ООП

  • @ОлегЛисак-я5б
    @ОлегЛисак-я5б Год назад +1

    Пробігся по каналу і зрозумів, що це те що треба перед співбесідою юніті, дякую за працю. Такий контент заслуговує на більше

  • @Mango-en1yq
    @Mango-en1yq 3 года назад +4

    Спасибо, умный и добрый человек!

  • @VitVit312
    @VitVit312 3 года назад +3

    Крайне рад что есть такой годный контент, не представляю как можно жить без такого :3

  • @АндрейКурелов-ш6п
    @АндрейКурелов-ш6п 3 года назад +4

    Почему это видео так поздно мне попалось... Классная подача материала!

  • @sequerience
    @sequerience Год назад +5

    Смеюсь и плачу, когда вижу комментарии где люди каждую строчку критикуют. Вы не забывайте, что программирование придумано людьми для того, чтобы оно приносило пользу, а не эстетический оргазм, который нужен только людям с окр и/или перфекционизмом

  • @PSAReV_PLAY
    @PSAReV_PLAY 3 года назад +3

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

  • @annastudenikova376
    @annastudenikova376 6 месяцев назад +1

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

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

    Боже, идеальный канал, все нах, бессонные ночи поехали. Ты лучший!

  • @jstark8294
    @jstark8294 3 года назад +3

    очень помог, спасибо большое!

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

    Наткнулся на ваше видео и с первого раза все понял, спасибо. Хотя до этого сколько бы не вчитывался в принципы ООП до конца не мог нормально все понять.

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

    ты просто сокровище для начинающих программистов

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

    Автор, спасибо вам большое за ваш труд. С удовольствием послушал и даже разобрался! Теперь начинаю "крестовый" поход на все ваши ролики)))+подписался

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

    Это видео помогло мне выучить ООП! Спасибо.

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

    Мужик красава. Расти. Все будет окей скоро

  • @younggd
    @younggd 3 месяца назад

    Лучший, спасибо большое ❤

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

    Спасибо дружище! Полезные уроки!

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

    Спасибо за урок, очень полезное видео! 👍👍👍

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

    Спасибо, это очень нужный контент

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

    Спасибо за урок, без скучной теории, на живых примерах. Классно!

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

    Очень нравятся твои видео, жду новых с нетерпением

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

    Большое спасибо!

  • @theoctan8569
    @theoctan8569 3 года назад +7

    Каждый раз при запуске редактора Unity разливается одна банка зелёнки) XD

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

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

  • @dmitriypermyakov5402
    @dmitriypermyakov5402 3 года назад +5

    Вот хороший формат подачи материала. Дополнить 2D и ему цены не будет.

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

      Можно подробнее? Актуальные темы для уроков - это очень важно!

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

      Можно и подробнее - связываться с 3D начинающий разраб не станет, если он в своем уме, а вот начинать с 2D - это то что доктор прописал. Поэтому тематика 2D - востребована начинашками. Не зря всякие Флатинго/ХаудиХо и пр. Гоши Дудари активно снимали на эту тему. движения персов/камеры, свет, партиклы, цвет, бесплатные ассеты с магазина Юнити - я б рыл в ту сторону. И да, я имею шкурный интерес в таком материале.

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

      @@dmitriypermyakov5402 спасибо за пожелания, хорошие темы, есть что рассказать. Правда от себя добавлю, что порой 2D сложнее, чем 3D

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

      @@gamedevlavka проще всего на диване лежать. Ждем новых видео. Ну и сахара в видосы добавить, мемчиковой херни - начинающие разрабы это молодежь ± 20 лет. Удачи!

    • @Fenix72rus
      @Fenix72rus 3 года назад +11

      @@dmitriypermyakov5402 Мне 20 лет и никакие мемчики мне не нужны, спасибо откажусь. Хочу получать информацию, а не приколы.

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

    Бомба вообще

  • @Tornado-ln7fq
    @Tornado-ln7fq Год назад +1

    Нет принцип инкапсуляции,это когда в одном классе присутствуют свойства,или поля, методы,и когда они взаимодействуют с друг другом ,при этом они не зависят друг от друга,и даже не знают о существования друг друга,но при этом они могут взаимодействовать с друг другам,но при этом,их свойства,не как не пересекаются между собой,это один из очень сильных Паттернов.Но реализовать его могут единицы.
    А то что вы нам показал,не как даже близко не может назваться таким принципом .
    Помню смотрел одну лекцию,по php,там было написано,то что получает из вне,не коем образом не является инкапсуляции,даже если написаны в объектно ориентированном стиле ,я эти слова запомнил))

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

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

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

      Отличный вопрос! И это вопрос архитектуры игры! Если вкратце, то существуют конечные элементы геймплея (игрок, враги, объекты и др) и элементы контроля, которые следят за геймплеем и знают о них. Соответственно контроллеры регистрируются где-то в общем месте, которое имеет глобальный доступ. Соответственно через подобное место можно доставать контроллеры и из них уже нужные элементы геймплея.

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

    10:09 или слон летающий🤣

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

    Респект, только у меня появился вопрос. Можно ли реализовать свойства? Если да было бы круто у видеть такое видео.

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

    А часто используется в коммерческих проектах c# такой способ переноса фигурных скобок как в java? То есть в той же строке объявления метода.

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

      Не часто. Я сам уже пересел на классическую нотацию. Вообще все зависит от заказчика, или тех лида, который устанавливает код стиль

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

    Видео классное но остался момент, в SpyCar мы унаследовали BaseCar, и непереопределив метод Drive добавили метод на невидимость, который так и не использовали, в каком месте согласно парадигме ооп мы должны его вызывать(брать инпут с клавиатуры, вызывать метод стать невидимым). Это реализуется в InputController или инпут конкретно этого экземпляра мы будем брать в классе SpyCar?

    • @Anton-ny6tx
      @Anton-ny6tx Год назад +1

      Нужен еще один слой абстракции именно для машин с супер способностями.

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

      @@Anton-ny6tx а можно просто вместо конкретного действия (Move), передавать массив нажатых кнопок(или массив игровых действий, которые мы получаем от системы биндов, чтобы была возможность менять значения кнопок, нам ведь не важно какая кнопка нажата, важно само значение кнопки) через метод интерфейса например: OnPlayerInput, а реализация пусть сама разбирается какие методы вызывать (Fly, Drive и т.д) исходя из массива действий.
      Это делает нашу систему гибкой, и позволяет в производную от Car, добавить действия хоть для всех кнопок на клавиатуре, при этом базовые классы вообще не надо менять. И ещё позволяет нам в производных классах блокировать вызов базовых методов, изменяя массив игровых действий в производных классах до вызова base.OnPlayerInput.

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

    У меня в Inputcontroller нет ячейки для добавления ссылки на Character.Как исправить?

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

      Возможно, нужно дописать [SerializedField] перед приватным полем

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

      @@gamedevlavka спасибо за ответ ,все было гораздо проще ,нужно было сохранить код в VS 😂

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

    летающую машину логичнее отнести к воздушному транспорту, т.е. наследоваться от лучше какого-нибудь AirVehicle с методом Fly(). BrokenCar вообще мем какой-то, здесь лучше добавить булевое значения isBroken и соответственно проверить условие в Drive() в базовом классе

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

      Это все понятно, у меня задача была показать вещи на примитивных примерах, чтобы был понятен механизм. А то, что он не лучшее решение - это здесь вообще роли не играет.
      Тем не менее AirVehicle должен быть унаследован от некоего Vehicle и иметь переопределенный метод Move(), а не Fly, иначе будет жесткая зависимость от того, летающее транспортное средство или нет. Булевое значение тоже не всегда подойдет, пример - несколько типов раздолбанных машин, одна без колес, но мотор работает и можно газовать, другая совсем сломана и мотор не работает, третья вроде едет, но с очень медленной скоростью, рывками, как-нибудь еще. Под разные задачи - разные решения

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

      @@gamedevlavka да, под разные задачи - разные решения.
      я же не писал, что Move() вовсе не будет, это же реализация интерфейса, я имел в виду странность содержания двух по сути взаимоисключающих методов Fly() и Drive(), разве только если у машины не 2 мода - воздушное и наземное перемещение, однако тут уже возникают другие вопросы..
      насчёт примитивных примеров, тогда лучше было бы взять в качестве них что-то имеющее больше смысл. если это видео совсем для новичков, мало ли, как их воспримут

  • @ЕвгенийВасильев-щ7в
    @ЕвгенийВасильев-щ7в 3 года назад +2

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

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

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

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

    как можно проверить, стоит ли деталька в механизме на своём месте?
    (в игре типа надо собрать механизм)
    У меня есть абстрактный класс BaseDetail
    и разные детальки типа винты, шестерёнки, крышки
    они наследуются от BaseDetail, у которого есть булевая переменная, показывающая состояние детальки(уже на месте или нет), но я хз как к ней обратиться, потому что деталей много и у всех разные скрипты и названия

  • @vicktoriashepard
    @vicktoriashepard 3 года назад +3

    вав, клёво, не академично но доступно и главное на примерах. а S.O.L.I.D. так же сможешь)?

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

      Я не академик, а практик) SOLID, кстати, важная тема. Поставлю на очередь)

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

    Посоветуйте кто-нибудь серию уроков тут на ютубе, где такую реализацию ООП делают на реальной игре что бы лучше понять суть

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

    в теме с абстракцией после трех скритов в unity выбивает ошибку NullReferenceException, Что это значит?

  • @КравченкоДанило-б7ц

    Бро можешь провести обучалку с# unity

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

    Не ..не... Никто не заметил неправильного наследования? BrokenCar? Точно? Это же состояние) Грубая ошибка! У тебя в base классе должен быть enum работающая машина, сломанная машина и т.д. "А, во все остальные ты наследуешь этот enum" через паблик или протект. Лучше через паблик!😀 Учишь наследовать от болды. Это мина, которая уничтожит архитектуру проекта.

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

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

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

      И лучше через протектед

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

    Ввод и управление кем-то это не одно и тоже, почему тогда InputController вместо того что бы отвечать за информаицю о вводе управляет кем-то?

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

    Я раскрыл тебя все ФСБ ТУТ

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

    Копец у тебя структура. У меня PlayerMovement, PlayerRotation, PlayerShooting, LivingEntity и это всё я вешаю на Player. Unity изучаю 20 дней. Я так понял у меня плохая структура? И мне нужно всё переделать?

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

      Если я правильно представил, то да. Но ты не расстраивайся, через подобное проходит каждый, и вот ты уже прошел, а значит стал опытнее. Путь улучшения кода, он бесконечный

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

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

  • @ГерманПопов-г4ч
    @ГерманПопов-г4ч 2 года назад

    Классы ненаследуют интерфейсы, а реализуют их

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

    -> Интерфейс - это такая штука
    -> Исключение - это отдельная тема для изучения
    -> И вот, мы работаем как бы с абстракцией
    Кого? Куда? Зачем? Ни одного нормального объяснения. Весь урок сводится к "Ээ, ну тут вот так делаем, а тут вот так и всё работает". Классно. Урок подойдёт только тем, кто уже хорошо знаком с ООП. Тогда в чём его смысл?

    • @gamedevlavka
      @gamedevlavka  3 года назад +9

      Урок для тех, кто изучал программирование где-либо, знает теорию. Но не доконца понимает, как работает на практике. Поэтому сухая теория опущена и на пальцах рассказывается, как работает на практике

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

    На словах "унаследуемся от интерфейса" становится понятно, что ролик смотреть нет смысла)

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

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

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

    Где вас таких рожают, которые говорят Чарактер?

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

      Специально для тебя: КэРэКтЕр

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

      @@ichbinschlange ай спс))

  • @андрейракчеев-ы2н
    @андрейракчеев-ы2н 2 года назад

    Тупейшее и неверное объяснение. В комментах либо боты либо люди с очень-очень поверхностными знаниями

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

      тоже смутил brokencar ?)

    • @андрейракчеев-ы2н
      @андрейракчеев-ы2н 2 года назад

      @@Michael_Sh я не дошёл до туда)
      Уже на инкапсуляции и на том, что input controller почему-то двигает персонажа всё стало ясно

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

      @@андрейракчеев-ы2н Как тогда, где инфу найти?

    • @андрейракчеев-ы2н
      @андрейракчеев-ы2н 2 года назад +1

      @@alexwinston3635 я бы посоветовал почитать какую-нибудь книгу на эту тему, так как принципы ООП не меняются. К сожалению, не могу посоветовать книгу именно по изучению с нуля, т.к. я проходил это в универе, а не учил самостоятельно, но очень советую почитать "паттерны проектирования", когда появится небольшое понимание. Именно от авторов Фримен, Робсон, Сьерра, Бейтс. Читается легко и помимо паттернов там хорошо раскрывается тема и принципы ООП подхода. Но опять же, рекомендую читать уже после того, как появится понимание ООП

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

      @@андрейракчеев-ы2н спс за совет!