Продвинутый C# в Unity. Паттерн Visitor [Посетитель]

แชร์
ฝัง
  • เผยแพร่เมื่อ 5 ม.ค. 2025

ความคิดเห็น • 60

  • @Tarpopo
    @Tarpopo 3 ปีที่แล้ว +2

    кратко, емко и по делу, есть интересные практики, вот, держи лайк)

  • @A3azel
    @A3azel 9 หลายเดือนก่อน +6

    Делать хитбокс визитером не очень в плане открытости/закрытости. Лучше сделать оружия визитерами, тогда для добавления нового оружия нужно будет создать 1 реализацию визитера и все. Собственно визитер и нужен для удобного добавления операции над существующей иерархией классов (хибоксов).

    • @evggg
      @evggg หลายเดือนก่อน

      Есть пример? Не совсем допонял.

    • @МаратГафиатуллин-н3п
      @МаратГафиатуллин-н3п 13 วันที่ผ่านมา

      Вообще советуют элементами выбирать стабильные объекты. оружие в данном случае ошибка?

    • @A3azel
      @A3azel 11 วันที่ผ่านมา

      @@МаратГафиатуллин-н3п Все зависит от проекта, если в будущем планируется добавлять другие оружия, то тогда все оружия можно назвать не стабильной иерархией классов которая будет изменятся. Вот даже в видео автор (5:08) добавляет новое оружие и сразу же сталкивается с проблемой что нужно пройтись по всем ошибкам и добавить во все классы хитбоксов реализацию нового метода. А если бы хит боксов было бы не 2-3, а штук 20-30 ? Ну такое.
      Ну и по хорошему визитер должен содержать только операцию нанесения урона (принцип единственной ответственности), я бы его вынес в отдельную иерархию и разделил бы по типам урона (пуля, взрыв, электричество и т.д.) каждый метод которого определял бы взаимодействие конкретного типа урона с каждым хибоксом. Тогда при добавление нового оружия, если тип урона для него уже существует (допустим пули) то добавлять ничего не надо, просто используем уже существующий визитер для пуль. А если это новый тип урона то создаем реализацию нового визитера с методом на каждый хитбокс. В итоге это будет один новый класс (и в одном исходнике, что удобно) и не надо редактировать уже существующие классы (принцип открытости/закрытости).

  • @alicewithalex
    @alicewithalex 2 ปีที่แล้ว +1

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

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      На здоровье, договорились)

  • @ThePirateHistory
    @ThePirateHistory 3 ปีที่แล้ว +1

    Отлично, малесь быстро, но мне кажется из-за этого я и понял больше, и интереса стало больше)

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +1

      Спасибо)
      Повторюсь, быстро там, где код, не совсем (или никак не) относящийся к теме, но может быть интересен людям, видимо интерес есть 😄🔥

  • @alexsklyarov6792
    @alexsklyarov6792 3 ปีที่แล้ว +4

    Привет, спасибо за туториал. Сними ролик про UniTask, вижу ты его используешь в проекте)))

  • @PavelStr-x5w
    @PavelStr-x5w 2 ปีที่แล้ว +1

    комментарий в поддержку)

  • @d3dx259
    @d3dx259 2 ปีที่แล้ว +1

    Привет, на отрывке 4:28 метод PerformAttack имеет параметр override, но он ,вроде бы, применяется только к abstract или virtual. Можно небольшое объяснение как это работает?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      Привет, это переопределение методов. Полиморфизм подтипов. Можешь это погуглить)

    • @d3dx259
      @d3dx259 2 ปีที่แล้ว

      @@NightTrainCode а ок, спасибо

  • @piijjen
    @piijjen 3 ปีที่แล้ว +3

    Ничего не понял, но очень интересно.

  • @ИванДерябкин-ц3д
    @ИванДерябкин-ц3д 3 ปีที่แล้ว

    Ой как хорошо, спасибо за видео

  • @psy_gamer
    @psy_gamer 3 ปีที่แล้ว +7

    Очень интересная реализация паттерна!)
    А будет ли разбор паттерна "состояние" для ИИ?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +4

      Привет, благодарю)
      Думаю, да, будет 😎

    • @MrGreenwud
      @MrGreenwud 3 ปีที่แล้ว +1

      Я тоже жду уроки про другие патерны

  • @entity5148
    @entity5148 3 ปีที่แล้ว +1

    Спасибки!)

  • @SMT-ks8yp
    @SMT-ks8yp 3 ปีที่แล้ว +2

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

  • @gameviewer5693
    @gameviewer5693 3 ปีที่แล้ว

    Спаcибо за видео, а можно узнать про класс Unit, он в себе содержит только ссылки на компоненты и другие классы обращаются к ним через Unit? И так как доступны 2 класса UnitHealth и UnitDamageable, то можно менять значение в UnitHealth на прямую, игнорирую UnitDamageable получается

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      На здоровье
      Да, только содержит ссылки на компоненты. А все компоненты содержат ссылку на этот класс Unit, чтобы можно было удобно друг к другу обращаться
      Можно менять значение только в UnitHealth, но это нелогично
      Через UnitDamageable можно наносить урон (метод ApplyDamage), а если необходимо вылечить юнита, то нужно сделать отдельный метод, например, просто Heal

    • @gameviewer5693
      @gameviewer5693 3 ปีที่แล้ว

      @@NightTrainCode спасибо. А касательно методов Default Visitor, там аргументом передается оружие, а параметром принимается WeaponAttack, не подскажешь какая там иерархия наследования? Странно что оружие и атака оружия наследуются друг от друга, учитывая разделение ответственности на том же юните. Хотя возможно именно с оружием это имеет смысл, но все же наверное назову IWeapon или просто Weapon тогда

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +1

      @@gameviewer5693 DefaultRaycastVisit спасает от дублирования кода
      У оружия есть основной Weapon, как у Unit
      В классе Weapon есть ссылки на все компоненты, например:
      WeaponAttack
      WeaponAudio
      WeaponAnimator
      WeaponAmmunition
      И т.д., и т.д.
      WeaponAttack для каждого оружия свой, так как поведение у них разное. А так, можно и просто Weapon основной передавать, а не WeaponAttack

  • @evilvirraZzz
    @evilvirraZzz 3 ปีที่แล้ว +1

    Посмотрел гитхаб, увидел что местоположение - Красноярск, так ли это на самом деле?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      Да, всё верно, а что смущает?
      Земляк?)

    • @evilvirraZzz
      @evilvirraZzz 3 ปีที่แล้ว +1

      @@NightTrainCode Да)

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +1

      ​@@evilvirraZzz Левый берег на связи 🤙

  • @gamingpro3324
    @gamingpro3324 3 ปีที่แล้ว

    здраствуйте, снимите видео как уменшить трис ивертс, из за этого игра лагает

  • @leyn7229
    @leyn7229 3 ปีที่แล้ว

    Привет, когда видео про вкладку Lighting?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      Салют, вряд-ли в скором времени, пока другие темы

    • @leyn7229
      @leyn7229 3 ปีที่แล้ว

      @@NightTrainCode очень нужно просто :(

  • @moranyt8299
    @moranyt8299 2 ปีที่แล้ว

    А вы еще вернетесь?((( Я прост новенький, в танке так сказать, мб есть причина того что 7 мес без роликов.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Привет, в телеграме у меня почаще посты выходят)
      Новый ролик уже на днях после такого долгого перерыва 🥳

    • @moranyt8299
      @moranyt8299 2 ปีที่แล้ว

      @@NightTrainCode ебоооииии

  • @lewaplay
    @lewaplay 2 ปีที่แล้ว

    тутор крутой но где ссылка на репу?))

  • @ВячеславПавлович-е1р
    @ВячеславПавлович-е1р 3 ปีที่แล้ว +3

    Хорошо объясняешь , а главное еще и правильно. Нету до чего прицепиться. Хотел поругать за использование тегов, но не получилось 😂

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว +2

      Спасибо! Ахвххаха, да, всё продумано 🤣

  • @КириллКиселев-е6э
    @КириллКиселев-е6э 3 ปีที่แล้ว

    Давай про паттерн абстрактная фабрика

  • @АлександрГрек-м2о
    @АлександрГрек-м2о 3 ปีที่แล้ว

    Подскажи пожалуйста где вообще можно взять библиотеку Юнити ?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      Чего?)

    • @АлександрГрек-м2о
      @АлександрГрек-м2о 3 ปีที่แล้ว

      @@NightTrainCode я просто пока в этом профан , имею ввиду где узнать как и что выполняет та или иная функция , класс , переменная ?

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      @@АлександрГрек-м2о Что касается кода - справка Microsoft про C# + видео на ютабе
      Что касается библиотеки Unity, которая идёт вместе с движком - документация на сайте Unity + тоже видосы на ютабе

    • @АлександрГрек-м2о
      @АлександрГрек-м2о 3 ปีที่แล้ว

      @@NightTrainCode теперь осталось выучить английский, ладно спасибо и удачи )

    • @vladislavkresov2910
      @vladislavkresov2910 3 ปีที่แล้ว

      @@АлександрГрек-м2о В документации Unity есть даже туториалы

  • @VitVit312
    @VitVit312 3 ปีที่แล้ว +3

    Каеф, но моменты с кодом иногда очень быстрые, не успеваешь сообразить что тебе что то поясняют
    Отрывки из кода на столько быстро пролетают что даже не понятно что ты там хотел показать, приходится ставить на паузу постоянно
    Не спеши, ты нам ещё живой нужен с:

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      Спасибо! 😉
      Не останавливаюсь надолго в тех моментах, которые не относятся к теме видоса, но, может быть, будут кому-то полезны)

    • @grimseal
      @grimseal 3 ปีที่แล้ว +3

      Весь ютуб смотришь на х2, и только найт трейн на x0.5 :-D

    • @NightTrainCode
      @NightTrainCode  3 ปีที่แล้ว

      @@grimseal 👻🤡

  • @nuciesto6917
    @nuciesto6917 3 ปีที่แล้ว

    0:18 дробовик автомат)
    P.S. Это не дробовик(

  • @vladyan01
    @vladyan01 2 ปีที่แล้ว

    Ничерта не понял, видимо рано залез сюда

    • @МаратГафиатуллин-н3п
      @МаратГафиатуллин-н3п 13 วันที่ผ่านมา

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