Синглтон (Singleton) в C#. Рассказываю на примерах в Unity3d, как пользоваться

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

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

  • @AlexanderBakharev-x6h
    @AlexanderBakharev-x6h 9 месяцев назад +1

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

  • @АрсенийМракобесов-з5г

    3 дня над этим голову ломал, а оказалось всё так просто) Спасибо)

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

    в который раз даже при запросах на англ.яз, попадаю на твой канал. Значит подписка. Спасибо, годный контент.

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

    Благодарю! Очень доходчево и понятно, кайф)

  • @yflow5337
    @yflow5337 4 месяца назад

    Спасибо, уже понятнее. Удобно когда доступ в любой точке проекта, жаль что нежелательная схема. Как бы это сделать чтобы не нужно было по полям всё тягать и без сложных доступов через десять ветвлений, неужели нет возможности более удобно работать.
    Еще немножко не по теме, вопрос, как сделать формат фигурных скобок чтобы они сразу размещались в таком стиле, когда открытая стоит сразу в строке, а не внизу?

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

    Для Bank нужно сделать private конструктор, без него мы можем создавать экземпляры банка.

  • @greedy4063
    @greedy4063 4 месяца назад +1

    я тот самый начинающий который узнал про синглтоны и хочет все через них делать) поэтому немного не хватило пояснения концовки - я понимаю почему много синглтонов это не очень хорошо, но для чего тогда этот паттерн, когда стоит использовать именно его? условно если в моей игре заведомо 1 игрок нормально ли его сделать синглтоном?

    • @gamedevlavka
      @gamedevlavka  4 месяца назад

      Синглтон неплохо подходит под задачу интеграции наружних сервисов: синглтон рекламы, платёжки, стим, аналитика и др. Всё остальное - на свое усмотрение, но игрок например - это, если вдаваться в абстракцию, персонаж с управлением. Поэтому обычно, его не делают синглтоном, т.к. все может поменяться. Но если тебе не страшно переделывать огромный кусок, если что, или ты вовсе не собираешься этого делать - то пользуйся, пожалуйста)

  • @k_ochegar
    @k_ochegar 3 года назад +6

    Годный контент, меньше воды, больше дела.
    Конечно не хватает наглядности работы скриптов для полного понимания. Я как новичок, так вообще тук-тук, и сложно воспринимать: Что? Зачем? Почему? Надеюсь со временем придет). Но все равно респект 👍 и буду следить 🔔🙂

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

      Наглядность работы скриптов я делаю через логи) не помню, есть в этом видео или нет, но в основном через логи. Этого достаточно, чтобы понять, что все работает и минимум времени, чтобы показать ту самую наглядность)

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

    Спасибо за урок.
    Подскажите почему класс c названием "GameManager" - это не очень хорошо?
    Unity скрипт с именем "GameManager" отображает специальной иконкой - шестеренкой. То есть разработчики Unity, по всей видимости считают, что такой класс должен быть в проекте.

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

      Т.к. в юнити низкий порог входа, то многие начинающие создают GameManager. Видимо юнити сделали эту шестеренку для них (честно говоря, ума не приложу, для чего). GameManager непонятно что делает, поэтому это плохо. Что он менеджерит? Игру? В каком смысле? Загрузка сцен? Тогда почему не SceneManager? Уровень? То есть LevelManager?
      Вообще менеджер непонятно что делает. Что значит менеджерить? Вот поэтому классы со словом Managet не приветствуются. Потому что непонятно что они делать должны

    • @Tera-h7e
      @Tera-h7e 16 дней назад

      Потому что Manager может делать всё, что угодно. А код нужно разбивать на понятные сущности. Большая сущность должна разбиваться на маленькие, но manager говорит о том, что в нём может быть всё, что касается того или иного, например игры - GameManager, это неправильно. Например, кто-то рассказывал, что в какой-то популярной игре был скрипт PlayerController, который изначально подразумевает, что он будет управлять персонажем, и из-за того, что игра расширялась, поведение игрока добавлялось и возникла проблема, что у них код был весь там и скрипт стал огромным, хотя, скрипты должны обычно не превышать 200-300 строк. Поэтому сложно будет его потом поддерживать, отсюда и причина отказаться от таких названий и делать что-то более конкретное

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

    Хорошее видео. спасибо!

  • @zhasim
    @zhasim Год назад +2

    отличный контент, рад что нашел активный канал)
    будет ли видео на тему "как не использовать монобех"? а то везде слышу, что монобехов должно быть мало и тд., как новичок не очень понимаю о чем тут речь и почему, а если и не использовать, то как тогда

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

      Ответил на последнем стриме, видео будет когда-то)

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

      Не наследовать класс от MonoBehaviuor?

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

      @@redfox7193 уже не актуально

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

    А можете поподробнее рассказать, почему плохо этот паттерн пихать в player, bank и всё остальное? Вот много где ругаются на него, но почему, никто не объясняет.
    Пысы. Спасибо за уроки)

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

      Как минимум два аргумента:
      1. Это может стать бесконтрольным. Ваш проект может превратиться в месиво синглтонов, потому что "это же удобно, и у меня никогда не будет больше одного экземпляра этого класса". Бесконтрольное использование синглтона может вылиться в проблему номер 2.
      2. Внезапно нужно все-таки создать еще один экземпляр чего-то, что было синглтоном. Например игрок. Вдруг поступило предложение делать локальный мультиплеер. И всё, весь проект накрывается медным тазом, потому что переделывать с синглтона игрока будет долго, мучительно и больно.

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

      @@gamedevlavka а по каким критериям определить подходящие и неподходящие для паттерна случаи?

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

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

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

      @@gamedevlavka спасибо за ответы! 🙏

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

      Не согласен с автором видео. Объяснение не очень подробное про то, почему плохо. Но не думаю, что смогу лучше.
      Классический пример, перезагрузка игры без выключения игры (накатываем прогресс другого игрока на устройство, обновляем вход через социальную сеть, игрок просто хочет все начать сначала).
      С синглотнами получается боль, потому что нужно вручную контролировать, что все данные очищаются. Либо писать, instance =null, instance = new Bank.
      Так же создавая синглтоны, мы говорим, что они создадуться лениво. Лениво - это когда они создаются не на старте игры, а при первом использовании (когда вызовем Bank.Instance).
      А теперь представьте, что синглтонам нужны еще синглтоны внутри, а тем тоже нужны синглтоны, еще и еще, вложенность синглтонов. И все они инициализируются в свои какие-то моменты времени.
      Вы просыпаетесь внезапно утром и понимаете, что когда в середине боя вы подбираете монетку - происходит дикий пролаг синглтонов, потом вы убиваете противника - еще пролаг. И вы не можете явно контролировать когда создавать синглтоны и какие классы их используют.
      А теперь игрок нажимает "Сброс прогресса", зависимости уничтожились не в том порядке, в котором создавались - произошел null reference или мы уничтожили не старый синглтон, а новый... мы даже не можем понять "а тот ли это синглтон". Да мы не можем даже понять какие синглтоны использует класс, не посмотрев внимательно на 200 строк и не зацепив глазом все методы и все строчки с SomeSingleton.Instance. А если в класс добавляем новый синглон - нужно не забыть его прокинуть в очистку.
      Вы начинаете разбираться и понимаете, что вы не можете контролировать ваш код. Не можете контролировать зависимости. Вы плачете.
      P.s. Синглтоны это не плохо, имхо, не нужно при любом раскладе их не использовать. Нужно попробовать, понять где можно и где нельзя. Синглтон понятный и простой паттерн, я видел большие проекты с синглтонами и все было в порядке. Вопрос в применимости и умению готовить

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

    А можно использовать синглтон например для системы оповещений?

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

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

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

      Это вопрос архитектуры. Один синглтон не может содержать абсолютно все ссылки, это неудобно и неправильно.
      Смотри уроки по архитектуре, там я буду об этом говорить

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

      @@gamedevlavka ну не все, а самые часто вызываемые, уроки конечно посмотрю. Давно толковых каналов не попадалось

  • @ВасилийМигулин-т1й
    @ВасилийМигулин-т1й 2 года назад +2

    Хотелось бы видео по паттерну декоратор и фабрика

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

    Мне кажется, что в awake ты его создаешь и сразу удаляешь. Запехни destroy в else if

    • @1deathpony112
      @1deathpony112 3 года назад

      Я тож так думаю, но подумал, что это я чего-то не шарю .-.

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

      Ключевое слово return разве не прерывает метод?

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

      @@def6141 точно!)

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

      @@def6141 так вообще можно писать? Это считается нормой? Или лучше иф-элз юзать?

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

      @@Kawabatushka конечно так можно писать) в данном случае иф-элз лишняя проверка.

  • @4rtochka
    @4rtochka 2 года назад

    А если создаю пустые обьекты , и называю в соответствии с тем чем они управляют,
    Например обьект LootBoxSystem содержит функции с алгоритмами шанса спавна ценного предмета, эна этот обьект ссылается кнопка, которая по нажатию заспавнит рандомгый обьект с заданым шансом, так допускается делать?
    Просто создавать системы с функциями на сцене и к ним привязывать кнопки и другие события ?

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

      В идеальном мире таких штук должно быть минимальное количество)

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

    Про первый пример. У GameManager есть статическое поле Instance. Разве при обращении к нему из других скриптов не происходит пробег по всем объектам на сцене как FindGameObject? Если да, то это же скажется на проиводительности

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

      Нет, так не происходит. Статическое поле - это переменная принадлежащая классу, а не его объекту, только и всего. Там подобных действий под капотом не происходит, и на производительность не влияет.

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

      @@gamedevlavka Спасибо! Я ошибался.

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

    а как вы на лету меняете регистр символов? ))

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

      Если я правильно понял вопрос, то это интеллектуальный набор редактора кода)

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

    Не хочу как то обидеть, но очень странный стиль кода. Никогда такого не видел. Визуально больно читать просто

    • @Tera-h7e
      @Tera-h7e 15 дней назад

      @@davidhops3952 А чего ты хотел? Автор не программист, а любитель. Его основная работа - блогер. Программирование это просто его хобби, он не может толком объяснить научным языком как и для чего, как писать и тп, я уже молчу за отсутствие должного образования для права учить людей. Он рассказал то, что знает на уровне какого-нибудь пройденного курса в интернете за пару дней. Так что вывод, если кто-то хочет чему-то научиться, то поступайте в соответствующий университет, читайте книги и практикуйтесь, решая конкретные задачи, куча курсов есть от тех людей, у которых есть образование для обучения других людей, так как они более компетентные, чем просто любители программирования из ютуба

  • @Tornado-ln7fq
    @Tornado-ln7fq 2 года назад

    Эм,как я и говорил уже в одном комментарии,подход ооп,это не панацея,это нужно четко различать ,если это есть,это не значит что это нужно везде пихать,сразу вспоминаю 9ю роту,где учили обращению пластичной взрывчаткой.Как он говорил,не лепи куда попало ,так и тут,если твой функционал это 80 строк когда,и больше это некуда не пойдет,то не лепи сюда ооп)),и сразу проблем станет меньше)).А да, KeyCode.B это больше не работает)

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

    Я как опытный программист хочу сказать что это максимально не правильная реализация паттерна. Но есть два нюанса:
    1) Не хочу обижать автора
    2) Не хочу чтобы некоторые полезные знания передавались другим людям. Так как будет появляться больше конкуренции в Google Play

    • @Tera-h7e
      @Tera-h7e 16 дней назад

      Хааххаха, а ты хорош

    • @Tera-h7e
      @Tera-h7e 15 дней назад +1

      @@kingofbattleonline К тому же автор не программист, а любитель. Его основная работа - блогер. Программирование это просто его хобби, он не может толком объяснить научным языком как и для чего, так как не компетентный, я уже молчу за отсутствие должного образования для права учить людей. Он рассказал то, что знает на уровне какого-нибудь пройденного курса в интернете за пару дней. Так что вывод, если кто-то хочет чему-то научиться, то поступайте в соответствующий университет, читайте книги и практикуйтесь, решая конкретные задачи, куча курсов есть от тех людей, у которых есть образование для обучения других людей, так как они более компетентные, чем просто любители программирования из ютуба

    • @kingofbattleonline
      @kingofbattleonline 15 дней назад

      @@Tera-h7e А я до сих пор не вижу своей ошибки. И на личности не переходил. Я "Любителя" поправил, все.

    • @Tera-h7e
      @Tera-h7e 15 дней назад

      @@kingofbattleonline причем здесь ты, я тебе отвечаю насчёт автора видео

    • @kingofbattleonline
      @kingofbattleonline 15 дней назад

      @@Tera-h7e А теперь подумай еще раз. Или не пытайся в эту сферу идти, маленький. С таким развитием у тебя только на завод дорога открыта

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

    бесполезное видео. Подача уровня межпространственного тв из рика и морти: ой тут забыл, ой еще вот это, можно же хотя б немного заморочиться с монтажем. Сама тема не раскрыта: синглтон плохо незя, а почему, а что лучше? Единственное, что раскрыто, это проверка на дубликат, но это какой-то супер нераспространенный случай, как минимум, для соло разработчиков, возможно, если в средней\большой команде есть аутисты, то это будет полезно, но в целом видео бесполезное. Механика инстансов не обьяснена, а то если зритель не знает про нее, у него тогда еще вопрос возникнет. Казалось бы такие классные темы видео и так мало просмотров и подписчиков, очевидно из-за бездарного подхода. Не хочу показаться банальным ненавистником и желаю более серьезно подходить к качеству материала, от этого и зрители и канал будут в выйгрыше.

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

      посоветуйте канал, который Вы считаете лучше

    • @Tera-h7e
      @Tera-h7e 16 дней назад

      А чего ты хотел? Автор не программист, а любитель. Его основная работа - блогер. Программирование это просто его хобби, он не может толком объяснить научным языком как и для чего, я уже молчу за отсутствие должного образования для права учить людей. Он рассказал то, что знает на уровне какого-нибудь пройденного курса в интернете за пару дней. Так что вывод, если кто-то хочет чему-то научиться, то поступайте в соответствующий университет, читайте книги и практикуйтесь, решая конкретные задачи, куча курсов есть от тех людей, у которых есть образование для обучения других людей, так как они более компетентные, чем просто любители программирования из ютуба

    • @Tera-h7e
      @Tera-h7e 16 дней назад

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