background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Better Singletons in Unity C#"

input logo icon
Обложка аудиозаписи
Подождите немного, мы готовим ссылки для удобного просмотра видео без рекламы и его скачивания.
console placeholder icon
Теги видео
|

Теги видео

unity tutorial
unity arcade game
unity game tutorial
unity
game development
game dev
game development unity
programming
c#
software development
learn to code
learn programming
unity tutorials
unity devlog
indiedev
gamedev
unity3d
unity singleton
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:00
Синглтон — это наиболее распространенный
00:00:02
шаблон программирования игр, но сможете ли вы получить
00:00:04
от него максимальную пользу сегодня? Я хочу пройти
00:00:07
весь путь от базового синглтона C
00:00:09
через все варианты, которые я
00:00:11
использовал, вплоть до нулевого объекта
00:00:13
Singleton, который мы рассмотрим. поговорим немного о
00:00:15
шаблоне программирования нулевых объектов, и
00:00:18
я хочу продемонстрировать некоторые новые
00:00:19
функции C, такие как методы интерфейса по умолчанию,
00:00:22
о которых сегодня можно много поговорить, так что
00:00:24
давайте перейдем к
00:00:28
этому, и,
00:00:31
как обычно, давайте начнем с
00:00:32
основ и постепенно доберемся до большего. и более
00:00:34
продвинутый, если вам нужно обеспечить соблюдение
00:00:36
ограничения, согласно которому вам нужно только одно
00:00:38
что-то, но вам не нужно предоставлять
00:00:40
его редактору, тогда рассмотрите возможность
00:00:42
создания чистого синглтона C, вы можете сохранить
00:00:45
экземпляр в частном поле, а затем
00:00:47
предоставить его с общедоступным свойством, если
00:00:49
экземпляр имеет значение null, когда кто-то идет за
00:00:51
ним, вы можете просто создать новый
00:00:53
и сохранить его там в своем личном поле,
00:00:55
чтобы в будущем вы или кто-либо еще не могли
00:00:58
просто создать нового счетчика
00:01:00
где-либо, сделайте частный конструктор
00:01:02
доступным теперь это настроено, единственный способ
00:01:03
создать нового счетчика - это
00:01:05
вызвать экземпляр, теперь это
00:01:07
не так уж много кода, и
00:01:09
лично я бы не стал переводить это в
00:01:11
общий тип или что-то в этом роде, как я собираюсь что
00:01:13
касается моно-поведения, которое мы
00:01:15
собираемся увидеть, поэтому давайте двинемся дальше и посмотрим
00:01:17
на что-то немного более сложное,
00:01:19
где вы действительно хотите предоставить свой
00:01:20
синглтон редактору, и снова это
00:01:24
настолько просто, что второй пилот смог заполнить
00:01:25
это сразу без какой-либо помощи с
00:01:27
моей стороны, в отличие от сингла на чистом C,
00:01:30
здесь мы можем подключиться к жизненному
00:01:32
циклу Unity при пробуждении, мы можем проверить, есть ли
00:01:34
уже экземпляр, назначенный как
00:01:36
одиночный банк, если нет, то этот
00:01:38
экземпляр становится синглтоном если
00:01:40
один из них уже назначен, давайте просто
00:01:42
уничтожим этот игровой объект, и это обеспечит
00:01:44
соблюдение ограничения наличия только
00:01:46
одного экземпляра этого типа для меня, это
00:01:48
уже слишком много шаблонного шаблона, мне нравится
00:01:50
хранить три варианта общего
00:01:52
синглтона, чтобы я мог просто перехватить в
00:01:54
то, что всякий раз, когда мне нужен один из самых простых из
00:01:57
них, это всего лишь одна тонна типа T,
00:01:59
где t - компонент, у него
00:02:02
снова будет просто статическое поле для хранения
00:02:04
экземпляра, теперь мне нравится хранить
00:02:06
здесь несколько общедоступных методов, которые пригодятся
00:02:08
время от времени экземпляр has
00:02:10
сможет сказать нам,
00:02:11
был ли синглтон вообще инициализирован или
00:02:13
нет. В некоторых ситуациях метод try get может быть полезен
00:02:16
в публичном геттере. Я
00:02:18
собираюсь добавить здесь немного больше
00:02:20
устойчивости. можем сказать, если
00:02:22
экземпляр имеет значение null, давайте использовать единицы, находим
00:02:25
любой объект по методу типа, это извлекает
00:02:27
любой активный загруженный объект с ключом типа,
00:02:30
который существует в любой из загруженных сцен,
00:02:33
если мы все еще не можем его найти, тогда давайте
00:02:35
просто создадим свой собственный, чтобы мы могли создайте экземпляр
00:02:37
нового игрового объекта, и мы сможем добавить
00:02:39
к нему компонент типа T. Я просто собираюсь
00:02:42
изменить имя здесь, чтобы мы могли
00:02:43
видеть, что он был сгенерирован автоматически, что
00:02:46
означает, что мы либо решили не размещать его
00:02:48
в нашей сцене, либо мы забыли сейчас если бы мы
00:02:51
поместили этот элемент в нашу сцену, когда
00:02:53
игра запустится, будет вызван метод пробуждения, чтобы
00:02:54
мы могли
00:02:56
инициализировать Singleton, теперь пробуждение может
00:02:59
вызываться в некоторых ситуациях в
00:03:00
режиме редактирования, чтобы мы могли поставить здесь галочку с надписью
00:03:02
если приложение не
00:03:04
воспроизводит возврат, в противном случае давайте установим
00:03:06
экземпляр, равный этому, как тип T, и
00:03:09
все готово, у нас есть простой универсальный
00:03:11
синглтон, который скрывает
00:03:12
для нас весь этот шаблон, теперь еще один
00:03:15
вариант этого - постоянный
00:03:17
синглтон, который не не уничтожать при загрузке,
00:03:19
это почти то же самое, что и этот, поэтому я
00:03:21
собираюсь создать новый класс и просто
00:03:23
скопировать и вставить это, а затем мы можем
00:03:25
просто внести некоторые изменения здесь, сейчас есть одна
00:03:27
вещь, касающаяся не уничтожать при загрузке, это
00:03:29
только работает на игровых объектах на корневом
00:03:31
уровне, поэтому я собираюсь установить
00:03:33
здесь логический флаг, для которого по умолчанию будет установлено значение true,
00:03:36
который будет автоматически удалять родительский объект для этого объекта, если
00:03:38
он был родительским, он является дочерним элементом
00:03:39
чего-то, что мы хотим вернуть на
00:03:41
корневой уровень. Итак, что мы можем сделать, так это когда
00:03:43
мы инициализируем, мы можем сказать, если этот
00:03:45
флаг был истинным, давайте установим родительский элемент равным
00:03:48
нулю, тогда я добавлю сюда еще одно условие.
00:03:50
Я просто собираюсь перетащить туда это
00:03:52
назначение экземпляра, и
00:03:54
это где мы добавим наш флаг «не уничтожать
00:03:56
при загрузке», здесь мы
00:03:58
также можем сказать, что если экземпляр не был нулевым,
00:04:01
то нам нужно уничтожить этот экземпляр, так что
00:04:05
я думаю, что до сих пор такого не
00:04:07
было. много сюрпризов, на что я
00:04:09
хочу обратить внимание дальше, это то, что я называю
00:04:11
регулятором Singleton. Сначала я просто
00:04:13
скопирую и вставлю этот постоянный
00:04:15
код Singleton в регулятор
00:04:17
Singleton. Я только что назвал его регулятором
00:04:19
Singleton, потому что он
00:04:21
саморегулирует свои действия. сделать, это
00:04:23
найти любой старый экземпляр Singleton или
00:04:26
экземпляры, которые существуют, и
00:04:29
уничтожить их, чтобы он стал
00:04:32
единственным синглтоном. Теперь я собираюсь сделать его
00:04:34
немного компактнее, нам на самом деле не нужно
00:04:35
отменять родительский контроль над этим, потому что мы это
00:04:37
те, кто будет создавать его экземпляр, нам,
00:04:39
вероятно, также не нужно пытаться получить,
00:04:42
конечно, вы можете сделать это так, как
00:04:43
захотите, это всего лишь примеры. Я
00:04:46
также собираюсь добавить флаги скрытия к этому новому игровому
00:04:48
объекту, потому что Я не хочу, чтобы он когда-либо
00:04:50
сохранялся вместе со сценой, мы
00:04:52
по сути уничтожили ту, которая
00:04:53
должна была быть в сцене, и заменили
00:04:55
ее этой, поэтому, чтобы приспособить все
00:04:58
это, мы должны сделать, чтобы каждый
00:05:00
из этих синглтонов отслеживал когда
00:05:02
они были на самом деле созданы, поэтому, убрав эти
00:05:05
изменения в верхней части класса,
00:05:07
давайте спустимся вниз
00:05:09
и позаботимся о реальной работе, чтобы мы
00:05:11
закончили с автоматическим включением родителя при пробуждении в
00:05:13
этом классе, давайте избавимся из этого я
00:05:16
собираюсь переместить здесь не уничтожать onload
00:05:17
из условия, и я также
00:05:20
собираюсь в том же месте установить
00:05:22
время инициализации, чтобы мы могли просто использовать
00:05:24
time.time для этого сейчас, прямо перед тем, как мы
00:05:27
сделаем назначение в конце мы
00:05:29
собираемся найти и уничтожить любые другие
00:05:32
существующие экземпляры типа T, чтобы мы могли
00:05:35
просто стереть эту часть прямо сейчас, давайте
00:05:37
просто создадим небольшой массив, и мы
00:05:39
найдем все объекты этого типа, и мы
00:05:41
сможем использовать единство более новый метод здесь,
00:05:44
второй пилот предлагает старый, но он
00:05:46
был заменен этим поиском объектов по
00:05:48
типу, и мы можем искать тип T, а затем
00:05:51
вы передаете режим сортировки, на самом деле не
00:05:53
имеет значения, какой режим сортировки мы используем, потому что
00:05:55
мы собираемся получить избавимся от них всех,
00:05:57
как только мы получим их все в массиве,
00:05:59
давайте просто пройдем по ним один за другим, мы
00:06:01
можем сказать, что для каждого T old в старых экземплярах
00:06:05
давайте получим компонент регулятора Singleton,
00:06:07
найдем инициализированное время, если
00:06:10
это инициализированное время меньше чем
00:06:12
инициализирован этот раз, мы собираемся
00:06:14
уничтожить тот старый, затем в конце
00:06:17
мы делаем задание, у нас должен
00:06:18
остаться только один синглтон в нашей
00:06:21
игре, чтобы он немного
00:06:23
отличался от того, что многие люди,
00:06:24
вероятно, видели раньше, так что это такая
00:06:26
система может быть полезна, если вы хотите
00:06:28
полностью заменить одну игровую систему на
00:06:30
другую в определенный момент вашей
00:06:31
игры, например, что-то случилось,
00:06:34
когда, например, вы переходите
00:06:36
от пользовательского интерфейса к игровому процессу, который вы хотите
00:06:38
получить. вынуть звуковую систему и
00:06:40
добавить новую звуковую систему игрового процесса,
00:06:43
почему бы нам не сделать такой пример? У меня
00:06:45
есть аудиоменеджер, это
00:06:47
регулятор, Синглтон, он ничего не собирается делать,
00:06:49
это просто фиктивный класс, чтобы мы
00:06:51
могли посмотреть, как это работает. работает, и теперь я также
00:06:53
сделаю генератор звука, теперь его можно было бы
00:06:56
поместить в игровой менеджер или что-то в этом роде,
00:06:58
но у меня нет такого класса, поэтому
00:06:59
давайте просто создадим компонент,
00:07:01
в котором будет префаб, и когда я это сделаю
00:07:04
что-то вроде, скажем, я нажимаю одну
00:07:06
клавишу, она появится в новом префаб-
00:07:11
менеджере звука, давайте зайдем в unity и посмотрим, как
00:07:13
это работает, предположим, что в моей сцене
00:07:16
здесь я уже настроил аудио-
00:07:18
менеджер, я сделаю префаб этого,
00:07:20
чтобы мы могли создать еще один, думаю,
00:07:22
может быть, я дам ему
00:07:23
другое имя, может быть, я просто, ну, я
00:07:26
назову новый сборный аудиоменеджер таким
00:07:28
образом, иерархия будет очень ясна,
00:07:30
когда мы Я сделал это сейчас для той, которая находится
00:07:33
в сцене, давайте добавим
00:07:35
сюда и генератор звука, и я просто перетащу этот префаб,
00:07:37
так что теперь, когда я нажму кнопку воспроизведения, вы увидите,
00:07:41
что аудиоменеджер, в который он сразу входит,
00:07:43
не уничтожает onload точно так, как мы
00:07:45
ожидаем, поэтому он будет работать так, как мы
00:07:47
хотим, когда мы захотим новый, я нажму
00:07:49
одну клавишу, и вот мы избавимся от
00:07:52
старого и вставим новый
00:07:54
синглтон, так что это все, что касается
00:07:57
создание регулятора типа Singleton,
00:08:00
который заменит все, что есть в вашей игре.
00:08:03
По сути, регулятор является противоположностью
00:08:05
постоянного Singleton,
00:08:07
постоянный будет уничтожать любые новые
00:08:10
созданные экземпляры, регулятор
00:08:12
будет уничтожать все старые, которые
00:08:15
уже
00:08:16
существуют, это последнее, чего я хочу
00:08:21
Сегодня мы поговорим о нулевом объекте Singleton. В этом видео я не собираюсь описывать все, что нужно
00:08:22
знать об использовании
00:08:24
шаблона нулевого объекта, но нулевой
00:08:27
объект часто очень хорошо представлен
00:08:30
синглтоном, потому что нулевой объект
00:08:33
ничего не делает. нулевой объект не имеет состояния, все
00:08:36
его свойства возвращают одно и то же значение,
00:08:38
все его методы не выполняют никаких операций, поэтому
00:08:41
нам нужен только один из
00:08:43
них, теперь здесь я реализовал очень
00:08:46
наивную версию шаблона команды, мне
00:08:48
нужна каждая из кнопок в моей игре
00:08:50
должна быть команда, но некоторые из них
00:08:53
пусты, поэтому вместо того, чтобы проверять их на
00:08:56
ноль каждый раз, когда я нажимаю на них, я могу просто
00:08:58
добавить туда команду n no, теперь я
00:09:01
определил все свои
00:09:02
команды, давайте создадим небольшую фабрику,
00:09:05
которая будет служить
00:09:06
в этом не должно быть ничего
00:09:09
особенного, что мы можем сделать, это просто иметь
00:09:11
здесь публичный метод, который создаст
00:09:12
для нас новый экземпляр, поэтому мы передаем
00:09:15
тип, который мы хотим, он создает новый и
00:09:17
возвращает его,
00:09:18
мы можем создайте еще один новый класс, который
00:09:21
будет представлять каждую из этих
00:09:22
кнопок на горячей панели, и для которого
00:09:24
потребуется ссылка на команду, но мы
00:09:26
могли бы по умолчанию указать новую нулевую
00:09:28
команду, которая у нас есть. Теперь мы получаем
00:09:31
сериализованную ссылку на
00:09:33
саму кнопку и установите прослушиватель
00:09:36
события onclick, который будет выполнять нашу команду и
00:09:38
отладить небольшой оператор, затем давайте также
00:09:41
добавим метод для установки и отмены этих
00:09:44
команд, когда мы снимаем команду, мы просто
00:09:45
помещаем туда новую нулевую команду обратно в
00:09:49
нашего героя просто для простоты ради этого у нас
00:09:51
будет список всех кнопок, мы установим
00:09:53
первые три кнопки, первая
00:09:55
и третья могут быть командой заклинания,
00:09:57
а вторая может быть
00:09:59
командой элемента, четвертая и пятая кнопки на
00:10:02
горячей панели будут намеренно пусто
00:10:04
сейчас, как раз перед тем, как мы вернемся в Unity.
00:10:07
Я просто собираюсь сделать здесь небольшую подчистку,
00:10:09
потому что это действительно слишком
00:10:10
многословно для того, что нам нужно,
00:10:12
команды элемента действительно могут просто наследовать от
00:10:14
базового абстрактного класса, который просто выводит,
00:10:17
что он что-то делает. и каков
00:10:19
был фактический тип, поэтому вместо этого я вместо этого сделаю
00:10:21
просто виртуальный
00:10:23
метод, и мы могли бы просто вывести
00:10:26
команду, которая была выполнена, и имя
00:10:28
типа, и таким образом эти классы сейчас
00:10:31
могут просто наследовать от команды и
00:10:33
им не нужно ничего делать, за исключением того, что
00:10:35
нулевая команда будет специальной, в ней будет
00:10:37
написано, что сейчас ничего не делать, этого достаточно
00:10:39
наивный пример, вы, вероятно,
00:10:42
уже видите, как мы собираемся генерировать
00:10:44
ненужное количество нулевых команд, которые
00:10:46
мы собираемся чтобы создавать новую нулевую команду
00:10:48
каждый раз, когда инициализируется кнопка, и
00:10:50
мы также создаем ее каждый раз, когда
00:10:51
снимаем кнопку с кнопки здесь, в Unity, все, что мне
00:10:54
нужно сделать, это создать игровой объект для моей
00:10:56
команды Factory. Я добавлю команду
00:10:58
Factory. компонент к этому новому объекту
00:11:00
я уже подключил все свои кнопки, так что
00:11:02
я могу просто нажать кнопку
00:11:04
воспроизведения, поэтому, если я нажму кнопку номер один, я
00:11:06
увижу, что выполнил заклинание, кнопка два,
00:11:09
кнопка элемента три, снова заклинание, теперь
00:11:12
пустые ничего не делают ничего не делает, так
00:11:15
что это именно то, что я хочу от
00:11:17
нулевого объекта. Я не хочу
00:11:19
создавать новый нулевой объект каждый раз, когда
00:11:23
я начинаю здесь рефакторинг. Я собираюсь
00:11:25
использовать некоторые функции языка C,
00:11:28
которые вы могли бы использовать. раньше не видел,
00:11:30
эти функции доступны только в
00:11:31
новейших версиях Unity, и они не имеют
00:11:34
обратной совместимости. Одна из этих
00:11:35
функций заключается в том, что теперь мы можем иметь методы интерфейса по умолчанию,
00:11:40
так что это значит для нас,
00:11:42
прежде всего, эта команда
00:11:45
Фабрика настолько проста, что на самом деле ей не
00:11:48
нужно жить отдельно. Я мог бы вырезать ее
00:11:50
оттуда и сделать общедоступным статическим
00:11:52
методом интерфейса, но, возможно, что более
00:11:55
важно, я могу определить
00:11:58
здесь свой нулевой объектный объект, что я могу do - это
00:12:01
общедоступная статическая команда, которую я командую null, это
00:12:05
просто свойство, которое установит ее как новую
00:12:08
нулевую команду, теперь наша нулевая команда может
00:12:10
стать внутренним классом интерфейса,
00:12:14
теперь, когда я избавился от фабрики и
00:12:16
переместил свой команду null в
00:12:18
интерфейс, я вижу, что мне нужно позаботиться о нескольких красных
00:12:20
волнистых линиях, давайте
00:12:22
сначала посмотрим на кнопки здесь,
00:12:24
вместо новой нулевой команды, я могу сказать, что я
00:12:27
командую. null сделайте то же самое
00:12:30
здесь раньше, когда я звонил на
00:12:33
фабрику, которую теперь могу назвать командой.
00:12:36
вместо этого создайте, это немного меньше для Bose.
00:12:39
Я просто заменю все эти кнопки здесь,
00:12:41
теперь мы сделали что-то вроде
00:12:43
другого, давайте убедимся, что это работает,
00:12:45
все, что мне нужно сделать, это нажать кнопку воспроизведения, и теперь
00:12:49
Factory работает, кнопки работают,
00:12:51
выглядит хорошо давайте удостоверимся, что нулевой
00:12:53
объект на самом деле работает, да, идеально,
00:12:56
поэтому мы получаем нулевой объект Singleton,
00:12:58
представленный там каждый раз, когда мы не
00:13:00
создаем постоянно новые
00:13:02
объекты,
00:13:04
здесь мы могли бы сделать еще одну оптимизацию, потому что теперь у нас есть
00:13:06
реализации методов по умолчанию, которые мы можем
00:13:08
на самом деле полностью избавьтесь от этого базового класса, он
00:13:10
нам не нужен, давайте просто
00:13:12
реализуем интерфейс, используя эти новые
00:13:15
функции C, мы фактически реорганизовали наш
00:13:17
код, чтобы он стал примерно на 50% меньше, чем он
00:13:20
был, я собираюсь оставить вам один
00:13:22
Последняя мысль здесь, и это
00:13:23
принцип наименьшего
00:13:25
удивления: то, что вы можете
00:13:27
что-то сделать, не всегда означает, что вы должны, чтобы
00:13:30
многие разработчики Unity не знали
00:13:32
об этих новых функциях C, и поэтому, если вы
00:13:36
собираетесь поделиться своим кодом с
00:13:37
кем-то еще они могут понятия не иметь,
00:13:39
что это было, что вы только что сделали, и не только
00:13:41
это, но вы как бы скрываете некоторые
00:13:43
детали реализации в
00:13:45
интерфейсе, очень трудно догадаться, что там
00:13:48
вообще будет что-то, чего
00:13:50
многие люди, даже старшие разработчики,
00:13:52
не стали бы подумайте, чтобы посмотреть там, вам
00:13:54
также нужно принять во внимание тот факт, что эти
00:13:56
методы не имеют обратной совместимости,
00:13:58
поэтому еще раз тщательно подумайте об использовании
00:14:00
этих новых функций. Просто потому, что вы можете,
00:14:03
не всегда означает, что вы должны
00:14:04
это все, что у меня есть для вас сегодня, я'
00:14:06
увидимся в следующем

Описание:

Pure Singletons, Generic Singletons and even the Null Object Singleton in this video that will take you Zero to Hero with the Singleton Programming Pattern in Unity C#! 🔔 Subscribe for more Unity Tutorials https://www.youtube.com/@git-amend Discord: https://discord.com/invite/FDRZGQBBUC ▬ Contents of this video ▬▬▬▬▬▬▬▬▬▬ 0:00 Singletons 1:50 Generic Singletons 8:20 Null Object Singleton 11:25 C# 8 Interface Methods *Source code:* https://github.com/adammyhre/Unity-Utils Assets Shown In This Video (Affiliate Links) Advanced Dissolve: https://assetstore.unity.com/packages/vfx/shaders/advanced-dissolve-111598?aid=1101lw3sv Aquarius Max Stylized Trees: https://assetstore.unity.com/packages/3d/vegetation/trees/stylized-trees-and-foliage-190601?aid=1101lw3sv Eole Foliage Shader: https://assetstore.unity.com/packages/vfx/shaders/eole-stylized-foliage-shaders-265842?aid=1101lw3sv Epic Toon FX: https://assetstore.unity.com/packages/vfx/particles/epic-toon-fx-57772?aid=1101lw3sv Dungeon Mason Tiny Hero Duo: (FREE): https://assetstore.unity.com/packages/3d/characters/humanoids/rpg-tiny-hero-duo-pbr-polyart-225148?aid=1101lw3sv Dmitriy Dryzhak Models: https://assetstore.unity.com/publishers/10181?aid=1101lw3sv Chromisu: Handpainted Forest MEGA Pack https://assetstore.unity.com/packages/3d/vegetation/handpainted-forest-mega-pack-248421?aid=1101lw3sv VFX Trees: https://assetstore.unity.com/packages/vfx/particles/environment/stylized-vfx-trees-gpu-based-effect-238647?aid=1101lw3sv Kronnect Beautify: https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/beautify-3-advanced-post-processing-233073?aid=1101lw3sv *Follow me!* https://linktr.ee/gitamend

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Better Singletons in Unity C#"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Better Singletons in Unity C#" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Better Singletons in Unity C#"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Better Singletons in Unity C#" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Better Singletons in Unity C#"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Better Singletons in Unity C#"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.