No video

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

  Рет қаралды 14,297

Лавка Разработчика

Лавка Разработчика

Күн бұрын

Пікірлер: 50
@user-xz9lp9kg5t
@user-xz9lp9kg5t 2 жыл бұрын
3 дня над этим голову ломал, а оказалось всё так просто) Спасибо)
@Andredy89
@Andredy89 2 жыл бұрын
в который раз даже при запросах на англ.яз, попадаю на твой канал. Значит подписка. Спасибо, годный контент.
@user-kk5ur4eq1m
@user-kk5ur4eq1m 5 ай бұрын
Ахахахах, вконце посмеялся от души. Ооо, можно синглтон не прописывать, персонаж синглтон, все синглтон😂 Отличная подача, видно что человек понимает и разбирается в том, о чем говорит! Уже давно подписан
@yelstofs6117
@yelstofs6117 9 ай бұрын
Благодарю! Очень доходчево и понятно, кайф)
@k_ochegar
@k_ochegar 3 жыл бұрын
Годный контент, меньше воды, больше дела. Конечно не хватает наглядности работы скриптов для полного понимания. Я как новичок, так вообще тук-тук, и сложно воспринимать: Что? Зачем? Почему? Надеюсь со временем придет). Но все равно респект 👍 и буду следить 🔔🙂
@gamedevlavka
@gamedevlavka 3 жыл бұрын
Наглядность работы скриптов я делаю через логи) не помню, есть в этом видео или нет, но в основном через логи. Этого достаточно, чтобы понять, что все работает и минимум времени, чтобы показать ту самую наглядность)
@Jicefrost
@Jicefrost 2 жыл бұрын
Хорошее видео. спасибо!
@yflow5337
@yflow5337 13 күн бұрын
Спасибо, уже понятнее. Удобно когда доступ в любой точке проекта, жаль что нежелательная схема. Как бы это сделать чтобы не нужно было по полям всё тягать и без сложных доступов через десять ветвлений, неужели нет возможности более удобно работать. Еще немножко не по теме, вопрос, как сделать формат фигурных скобок чтобы они сразу размещались в таком стиле, когда открытая стоит сразу в строке, а не внизу?
@jasim1798
@jasim1798 Жыл бұрын
отличный контент, рад что нашел активный канал) будет ли видео на тему "как не использовать монобех"? а то везде слышу, что монобехов должно быть мало и тд., как новичок не очень понимаю о чем тут речь и почему, а если и не использовать, то как тогда
@gamedevlavka
@gamedevlavka Жыл бұрын
Ответил на последнем стриме, видео будет когда-то)
@redfox7193
@redfox7193 Жыл бұрын
Не наследовать класс от MonoBehaviuor?
@jasim1798
@jasim1798 Жыл бұрын
@@redfox7193 уже не актуально
@AKasatikov
@AKasatikov Жыл бұрын
Для Bank нужно сделать private конструктор, без него мы можем создавать экземпляры банка.
@greedy4063
@greedy4063 26 күн бұрын
я тот самый начинающий который узнал про синглтоны и хочет все через них делать) поэтому немного не хватило пояснения концовки - я понимаю почему много синглтонов это не очень хорошо, но для чего тогда этот паттерн, когда стоит использовать именно его? условно если в моей игре заведомо 1 игрок нормально ли его сделать синглтоном?
@gamedevlavka
@gamedevlavka 17 күн бұрын
Синглтон неплохо подходит под задачу интеграции наружних сервисов: синглтон рекламы, платёжки, стим, аналитика и др. Всё остальное - на свое усмотрение, но игрок например - это, если вдаваться в абстракцию, персонаж с управлением. Поэтому обычно, его не делают синглтоном, т.к. все может поменяться. Но если тебе не страшно переделывать огромный кусок, если что, или ты вовсе не собираешься этого делать - то пользуйся, пожалуйста)
@annastudenikova376
@annastudenikova376 5 ай бұрын
Спасибо за урок. Подскажите почему класс c названием "GameManager" - это не очень хорошо? Unity скрипт с именем "GameManager" отображает специальной иконкой - шестеренкой. То есть разработчики Unity, по всей видимости считают, что такой класс должен быть в проекте.
@gamedevlavka
@gamedevlavka 5 ай бұрын
Т.к. в юнити низкий порог входа, то многие начинающие создают GameManager. Видимо юнити сделали эту шестеренку для них (честно говоря, ума не приложу, для чего). GameManager непонятно что делает, поэтому это плохо. Что он менеджерит? Игру? В каком смысле? Загрузка сцен? Тогда почему не SceneManager? Уровень? То есть LevelManager? Вообще менеджер непонятно что делает. Что значит менеджерить? Вот поэтому классы со словом Managet не приветствуются. Потому что непонятно что они делать должны
@YasnaKo
@YasnaKo 3 жыл бұрын
А можете поподробнее рассказать, почему плохо этот паттерн пихать в player, bank и всё остальное? Вот много где ругаются на него, но почему, никто не объясняет. Пысы. Спасибо за уроки)
@gamedevlavka
@gamedevlavka 3 жыл бұрын
Как минимум два аргумента: 1. Это может стать бесконтрольным. Ваш проект может превратиться в месиво синглтонов, потому что "это же удобно, и у меня никогда не будет больше одного экземпляра этого класса". Бесконтрольное использование синглтона может вылиться в проблему номер 2. 2. Внезапно нужно все-таки создать еще один экземпляр чего-то, что было синглтоном. Например игрок. Вдруг поступило предложение делать локальный мультиплеер. И всё, весь проект накрывается медным тазом, потому что переделывать с синглтона игрока будет долго, мучительно и больно.
@YasnaKo
@YasnaKo 3 жыл бұрын
@@gamedevlavka а по каким критериям определить подходящие и неподходящие для паттерна случаи?
@gamedevlavka
@gamedevlavka 3 жыл бұрын
Всегда нужно думать, как обойтись без него, это лучший вариант. Однако, его можно использовать в модулях, например: аналитика, класс самой игры Game (это из урока по архитектуре, который выйдет завтра), управление рекламой в мобильном приложении, управление внутреигровыми покупками - то, что запускается и инициализируется единожды и существует на протяжении всей игровой сессии.
@YasnaKo
@YasnaKo 3 жыл бұрын
@@gamedevlavka спасибо за ответы! 🙏
@karimkimsanbaev7932
@karimkimsanbaev7932 10 ай бұрын
Не согласен с автором видео. Объяснение не очень подробное про то, почему плохо. Но не думаю, что смогу лучше. Классический пример, перезагрузка игры без выключения игры (накатываем прогресс другого игрока на устройство, обновляем вход через социальную сеть, игрок просто хочет все начать сначала). С синглотнами получается боль, потому что нужно вручную контролировать, что все данные очищаются. Либо писать, instance =null, instance = new Bank. Так же создавая синглтоны, мы говорим, что они создадуться лениво. Лениво - это когда они создаются не на старте игры, а при первом использовании (когда вызовем Bank.Instance). А теперь представьте, что синглтонам нужны еще синглтоны внутри, а тем тоже нужны синглтоны, еще и еще, вложенность синглтонов. И все они инициализируются в свои какие-то моменты времени. Вы просыпаетесь внезапно утром и понимаете, что когда в середине боя вы подбираете монетку - происходит дикий пролаг синглтонов, потом вы убиваете противника - еще пролаг. И вы не можете явно контролировать когда создавать синглтоны и какие классы их используют. А теперь игрок нажимает "Сброс прогресса", зависимости уничтожились не в том порядке, в котором создавались - произошел null reference или мы уничтожили не старый синглтон, а новый... мы даже не можем понять "а тот ли это синглтон". Да мы не можем даже понять какие синглтоны использует класс, не посмотрев внимательно на 200 строк и не зацепив глазом все методы и все строчки с SomeSingleton.Instance. А если в класс добавляем новый синглон - нужно не забыть его прокинуть в очистку. Вы начинаете разбираться и понимаете, что вы не можете контролировать ваш код. Не можете контролировать зависимости. Вы плачете. P.s. Синглтоны это не плохо, имхо, не нужно при любом раскладе их не использовать. Нужно попробовать, понять где можно и где нельзя. Синглтон понятный и простой паттерн, я видел большие проекты с синглтонами и все было в порядке. Вопрос в применимости и умению готовить
@user-ml5tn8qn8j
@user-ml5tn8qn8j Жыл бұрын
Хотелось бы видео по паттерну декоратор и фабрика
@gamedevlavka
@gamedevlavka Жыл бұрын
Будет, записал в план)
@user-ml5tn8qn8j
@user-ml5tn8qn8j Жыл бұрын
@@gamedevlavka потрясающе) ждём
@be_Cycling
@be_Cycling 3 жыл бұрын
А если создать синглтон с ссылками на экземляры других классов, этакий хаб, чем это грозит?
@gamedevlavka
@gamedevlavka 3 жыл бұрын
Это вопрос архитектуры. Один синглтон не может содержать абсолютно все ссылки, это неудобно и неправильно. Смотри уроки по архитектуре, там я буду об этом говорить
@be_Cycling
@be_Cycling 3 жыл бұрын
@@gamedevlavka ну не все, а самые часто вызываемые, уроки конечно посмотрю. Давно толковых каналов не попадалось
@artemignat7764
@artemignat7764 3 жыл бұрын
Мне кажется, что в awake ты его создаешь и сразу удаляешь. Запехни destroy в else if
@1deathpony112
@1deathpony112 3 жыл бұрын
Я тож так думаю, но подумал, что это я чего-то не шарю .-.
@def6141
@def6141 3 жыл бұрын
Ключевое слово return разве не прерывает метод?
@artemignat7764
@artemignat7764 3 жыл бұрын
@@def6141 точно!)
@Kawabatushka
@Kawabatushka Жыл бұрын
@@def6141 так вообще можно писать? Это считается нормой? Или лучше иф-элз юзать?
@younggd
@younggd Жыл бұрын
@@Kawabatushka конечно так можно писать) в данном случае иф-элз лишняя проверка.
@defix_gamedev
@defix_gamedev Жыл бұрын
А можно использовать синглтон например для системы оповещений?
@Fenix72rus
@Fenix72rus 3 жыл бұрын
Про первый пример. У GameManager есть статическое поле Instance. Разве при обращении к нему из других скриптов не происходит пробег по всем объектам на сцене как FindGameObject? Если да, то это же скажется на проиводительности
@gamedevlavka
@gamedevlavka 3 жыл бұрын
Нет, так не происходит. Статическое поле - это переменная принадлежащая классу, а не его объекту, только и всего. Там подобных действий под капотом не происходит, и на производительность не влияет.
@Fenix72rus
@Fenix72rus 3 жыл бұрын
@@gamedevlavka Спасибо! Я ошибался.
@4rtochka
@4rtochka 2 жыл бұрын
А если создаю пустые обьекты , и называю в соответствии с тем чем они управляют, Например обьект LootBoxSystem содержит функции с алгоритмами шанса спавна ценного предмета, эна этот обьект ссылается кнопка, которая по нажатию заспавнит рандомгый обьект с заданым шансом, так допускается делать? Просто создавать системы с функциями на сцене и к ним привязывать кнопки и другие события ?
@gamedevlavka
@gamedevlavka 2 жыл бұрын
В идеальном мире таких штук должно быть минимальное количество)
@tomasgammister5776
@tomasgammister5776 3 жыл бұрын
а как вы на лету меняете регистр символов? ))
@gamedevlavka
@gamedevlavka 3 жыл бұрын
Если я правильно понял вопрос, то это интеллектуальный набор редактора кода)
@kingofbattleonline
@kingofbattleonline 2 жыл бұрын
Я как опытный программист хочу сказать что это максимально не правильная реализация паттерна. Но есть два нюанса: 1) Не хочу обижать автора 2) Не хочу чтобы некоторые полезные знания передавались другим людям. Так как будет появляться больше конкуренции в Google Play
@Tornado-ln7fq
@Tornado-ln7fq Жыл бұрын
Эм,как я и говорил уже в одном комментарии,подход ооп,это не панацея,это нужно четко различать ,если это есть,это не значит что это нужно везде пихать,сразу вспоминаю 9ю роту,где учили обращению пластичной взрывчаткой.Как он говорил,не лепи куда попало ,так и тут,если твой функционал это 80 строк когда,и больше это некуда не пойдет,то не лепи сюда ооп)),и сразу проблем станет меньше)).А да, KeyCode.B это больше не работает)
@davidhops3952
@davidhops3952 2 жыл бұрын
Не хочу как то обидеть, но очень странный стиль кода. Никогда такого не видел. Визуально больно читать просто
@squidward572
@squidward572 2 жыл бұрын
бесполезное видео. Подача уровня межпространственного тв из рика и морти: ой тут забыл, ой еще вот это, можно же хотя б немного заморочиться с монтажем. Сама тема не раскрыта: синглтон плохо незя, а почему, а что лучше? Единственное, что раскрыто, это проверка на дубликат, но это какой-то супер нераспространенный случай, как минимум, для соло разработчиков, возможно, если в средней\большой команде есть аутисты, то это будет полезно, но в целом видео бесполезное. Механика инстансов не обьяснена, а то если зритель не знает про нее, у него тогда еще вопрос возникнет. Казалось бы такие классные темы видео и так мало просмотров и подписчиков, очевидно из-за бездарного подхода. Не хочу показаться банальным ненавистником и желаю более серьезно подходить к качеству материала, от этого и зрители и канал будут в выйгрыше.
@annastudenikova376
@annastudenikova376 5 ай бұрын
посоветуйте канал, который Вы считаете лучше
Oh No! My Doll Fell In The Dirt🤧💩
00:17
ToolTastic
Рет қаралды 7 МЛН
ROLLING DOWN
00:20
Natan por Aí
Рет қаралды 11 МЛН
Parenting hacks and gadgets against mosquitoes 🦟👶
00:21
Let's GLOW!
Рет қаралды 13 МЛН
Singleton Design Pattern in C# - Do it THAT way
13:15
tutorialsEU - C#
Рет қаралды 25 М.
Everything You Need to Know About Singletons in Unity
8:38
Infallible Code
Рет қаралды 87 М.
Singleton - избегайте его
17:35
Volodya Mozhenkov
Рет қаралды 26 М.
Singletons in Unity (done right)
7:26
Game Dev Beginner
Рет қаралды 12 М.