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

Скачать "Building a UI in Godot - Godot Fundamentals"

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

Теги видео

Godot
Nodes
Scenes
SceneTree
Functions
Constants
Script
GDScript
Variables
Collisions
UI
User Interface
Signals
godot
godot4
godotengine
gamedev
gamedevelopment
indiedev
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:01
Привет всем, это Брейди,
00:00:02
мастер-разработчик игр, в сегодняшнем видео мы
00:00:04
продолжим нашу серию статей об
00:00:06
основах gdau. Мы добавим
00:00:08
в нашу игру простой пользовательский интерфейс, который будет
00:00:10
включать в себя счет, который будет увеличиваться, когда
00:00:11
мы собираем наши предметы коллекционирования. мы также
00:00:13
добавим индикатор перезагрузки для
00:00:15
визуализации состояния перезарядки оружия,
00:00:17
чтобы начать. Я хотел бы сначала
00:00:19
обратиться к нашей проектной
00:00:21
организации. Лучшая практика, которую я
00:00:23
обнаружил, заключается в том, что я использую новую сцену для
00:00:26
игры, которую я могу легко обернуть в мир и
00:00:28
уровень пользовательского интерфейса,
00:00:31
прежде чем мы это сделаем, хотя давайте посмотрим
00:00:32
на обзор файловой системы нашего проекта
00:00:35
в нашей папке сцен, мы начали
00:00:37
добавлять много сцен и скриптов, мы можем
00:00:40
улучшить это, добавив дополнительные уровни
00:00:41
организации с папками для пример, в
00:00:43
нашей папке сцен давайте создадим
00:00:46
папку сущностей, а внутри нашей папки сущностей
00:00:48
давайте создадим папку для нашего
00:00:51
танка. Внутри этой папки танка мы можем
00:00:54
перенести нашу сцену и сценарий танка, а
00:00:56
также сцену и сценарий оружия и перенести
00:00:59
их в эту папку танка.
00:01:02
что если у вас открыта сцена, вы можете
00:01:03
получить некоторые ошибки из-за вероятных
00:01:06
проблем с зависимостями, просто нажмите «ОК», мы проверим их через
00:01:08
минуту, теперь внутри нашего танка, мы также
00:01:10
хотим добавить папку для оружия на
00:01:13
случай, если мы захотим создать разные типы
00:01:15
оружие, мы можем переместить туда нашу сцену с оружием
00:01:17
и скрипт, мы также можем
00:01:19
рассмотреть возможность размещения туда нашей пули,
00:01:21
затем давайте обратимся к некоторой
00:01:23
мировой сцене внутри нашей сущности, давайте
00:01:26
создадим новую папку для объектов World,
00:01:28
мы пока просто назовем этот мир и
00:01:30
внутри этой папки мира мы можем разместить
00:01:32
наши сцены сбора ящиков и стен,
00:01:35
которые выглядят хорошо, давайте продолжим
00:01:37
и схлопнем объекты, мы создадим
00:01:39
новую папку в наших сценах и
00:01:41
назовем этот пользовательский интерфейс, мы будем хранить здесь все сцены, связанные с пользовательским интерфейсом.
00:01:44
также хотелось бы, чтобы
00:01:46
мировая сцена находилась в корне моей
00:01:49
папки сцен, и она может содержать уровни, вы
00:01:51
также можете поместить туда свои объекты
00:01:54
для наших целей, мы просто сохраним наши
00:01:55
объекты мира в нашей папке объектов,
00:01:57
и мы можем пойти и перетащить наши world в
00:01:59
нашу папку мира и внутри наших сцен мне
00:02:02
нравится создавать новую игровую сцену, которую мы
00:02:05
назовем этой игрой. tscn, мы оставим это
00:02:09
как 2D-
00:02:10
сцену, и цель этой сцены —
00:02:12
объединить ваш мир и объекты, поэтому,
00:02:16
если бы у нас было несколько уровней для нашей игры,
00:02:18
мы бы хотели иметь возможность перетаскивать их в
00:02:20
наш игровой экземпляр, что означает Мировая
00:02:22
сцена на самом деле не должна содержать
00:02:25
танк напрямую, поэтому давайте продолжим и
00:02:27
войдем в нашу мировую сцену, мы удалим
00:02:29
наш танк напрямую из мировой сцены,
00:02:32
вернемся к нашей игровой сцене и добавим нашу
00:02:35
сцену с танком обратно в
00:02:39
игру, обязательно сохраните вашу мировую сцену,
00:02:42
чтобы ваша игровая сцена отражала
00:02:43
это, и здесь мы можем переместить наш танк в
00:02:45
аналогичную позицию и сохранить ее.
00:02:48
Теперь, когда мы создали эту новую игровую
00:02:49
сцену, давайте продолжим и установим ее в качестве нашей
00:02:51
новой основной сцены, когда мы поиграйте в нашу игру,
00:02:54
мы будем использовать основную сцену для обертывания любого
00:02:57
нашего мира и объектов-танков, а также
00:03:01
любого пользовательского интерфейса, который мы создаем, давайте
00:03:03
продолжим и создадим наш пользовательский интерфейс,
00:03:05
теперь мы щелкаем правой кнопкой мыши по нашему пользовательскому интерфейсу и создаем
00:03:08
новую сцену, и здесь мы собираемся использовать
00:03:11
узел типа
00:03:15
холста, мы просто назовем его ui.
00:03:19
tscn мы сохраним корневой узел с именем UI,
00:03:23
и теперь все заглавные буквы внутри этого узла пользовательского интерфейса,
00:03:26
давайте продолжим и добавим узел управления.
00:03:28
Этот узел управления будет действовать как
00:03:31
корень для наших узлов управления пользовательским интерфейсом. Все они имеют
00:03:34
различное поведение в отношении того, как мы можем
00:03:35
привязывать и масштабировать в зависимости от
00:03:38
разрешения нашего экрана мы выбираем
00:03:40
настройки узлов управления, мы можем выбрать
00:03:43
этот режим полного прямоугольника.
00:03:44
Вы заметили, что когда мы выбираем его,
00:03:48
границы и привязка, которые представляют собой
00:03:50
зеленые значки, масштабируются в соответствии с разрешением
00:03:53
нашего окна, это отлично подходит для определения размера и
00:03:56
размещения. теперь создадим ваш пользовательский интерфейс для нашего пользовательского интерфейса, давайте
00:03:59
добавим немного полей, мы можем сделать это, добавив
00:04:01
узел управления полями, называемый
00:04:03
контейнером полей, мы также возьмем
00:04:05
настройки для этого контейнера и позволим
00:04:08
ему растянуться до полного прямоугольника.
00:04:10
Важное примечание об узлах управления:
00:04:12
что родительский элемент обычно будет контролировать
00:04:14
поведение всех дочерних элементов, поэтому, если
00:04:17
наш маршрут узла управления не был масштабирован до
00:04:20
полного прямоугольника, контейнер полей
00:04:22
не сможет сделать это сейчас внутри
00:04:24
нашего контейнера полей, если мы перейдем к
00:04:26
переопределениям темы в нашем инспекторе. панель
00:04:29
и разверните константы, мы можем добавить некоторые
00:04:31
отступы и поля слева, сверху, справа
00:04:34
и снизу, давайте просто сделаем 32 пикселя для
00:04:37
всех четырех из них, пока вы не
00:04:38
увидите этот эффект сразу, пока не
00:04:41
добавите дочерние элементы в Контейнер, давайте
00:04:43
продолжим и добавьте
00:04:47
контейнер vbox, теперь вы заметите, что наши
00:04:49
отступы или поля были добавлены, и наш
00:04:52
контейнер vbox теперь занимает весь
00:04:54
прямоугольник для наших целей, давайте
00:04:56
продолжим и переместим наш контейнер vbox так, чтобы он
00:04:58
масштабировался только вертикально вверх,
00:05:03
сжимаясь до верхнего края. начало
00:05:05
выравнивания по горизонтали будет растягиваться
00:05:09
слева направо, это поведение по умолчанию.
00:05:11
Далее мы собираемся распространить
00:05:13
горизонталь с помощью контейнера с именем
00:05:17
hbox, а внутри нашего контейнера hbox мы
00:05:20
добавим
00:05:23
метку, давайте продолжим и вызовем эту метку
00:05:26
оценки для этой оценки, мы продолжим и
00:05:29
дадим ей уникальное имя, чтобы мы могли получить к
00:05:31
ней доступ в сценарии. Теперь давайте добавим
00:05:34
сценарий в наш
00:05:36
пользовательский интерфейс, который мы назовем этим пользовательским интерфейсом. GD, мы также дадим
00:05:39
этому имя класса пользовательского интерфейса, теперь мы щелкнем
00:05:43
и перетащим нашу метку оценки
00:05:45
с помощью контрольного щелчка, и мы
00:05:48
назовем эту метку оценки. Мы добавим немного
00:05:51
поведения, чтобы иметь возможность отслеживать нашу
00:05:53
оценку внутри.
00:05:55
теперь в нашем пользовательском интерфейсе мы установим это значение равным нулю по
00:05:57
умолчанию и добавим
00:06:03
метод set теперь. Поведение, которое мы хотели бы
00:06:05
представить, — это возможность обновлять нашу
00:06:07
метку всякий раз, когда изменяется наша оценка, мы можем
00:06:10
создать для этого новую функцию, которую
00:06:12
мы будем вызывать он обновит метку оценки,
00:06:16
для этого мы возьмем нашу метку
00:06:17
оценки и установим текстовое значение,
00:06:21
равное строковому значению нашей оценки.
00:06:24
Теперь, когда наша оценка будет установлена, мы можем
00:06:27
использовать наш метод Setter для автоматического
00:06:29
обновления. наша метка оценок для корреляции.
00:06:32
Узнайте больше о функциях Setter и Getter для
00:06:34
переменной в
00:06:36
документации gdos. Теперь, когда у нас есть эта новая
00:06:38
функция, давайте установим ее в качестве функции по умолчанию, которая будет
00:06:42
запускаться, когда наш узел будет готов. Теперь давайте
00:06:45
свяжем коллекционные пикапы наших танков, чтобы
00:06:48
установить новый балл. основываясь на сигнале сделать
00:06:52
это, давайте создадим новую
00:06:53
функцию, и мы назовем это подчеркиванием
00:06:55
oncore,
00:06:57
собранным, и мы ищем
00:06:59
предмет коллекционирования, который нужно
00:07:01
подобрать, и если это предмет коллекционирования,
00:07:05
мы возьмем наш счет и добавим
00:07:08
100 теперь, чтобы связать это с нашим танком, давайте
00:07:11
откроем сцену с нашим танком, и внутри
00:07:13
мы можем добавить новую
00:07:15
функцию, мы создадим нашу новую функцию,
00:07:18
мы назовем ее,
00:07:19
соберите это, получим тип
00:07:22
коллекционного предмета, который мы хотим выдать
00:07:24
сигнал, когда что-то было
00:07:26
собрано в нашем резервуаре вверху; создать
00:07:29
сигнал, который мы назовем
00:07:32
собранным; это выдаст тип
00:07:35
коллекционного предмета, который был собран обратно
00:07:38
в нашей новой функции; мы можем вызвать
00:07:42
собранный сигнал и передать значение
00:07:45
предмет коллекционирования внутри нашего объекта, подбираемого
00:07:48
в нашем мире, если наше тело представляет собой тип
00:07:51
танка, мы знаем, что теперь у нас есть новая
00:07:55
функция сбора, и здесь мы можем указать
00:07:58
значение ячейки, которая является типом
00:08:00
подбора теперь, когда наш танк может
00:08:02
собирать и отправим сигнал о том, что что-то
00:08:04
было собрано, давайте свяжем этот новый
00:08:07
сигнал с нашим слоем пользовательского интерфейса, здесь в
00:08:10
игру вступает наша игровая сцена, теперь внутри
00:08:12
нашей игровой сцены давайте добавим
00:08:14
скрипт, который мы назовем этой игрой. GD и дайте
00:08:17
ему имя класса игры, теперь давайте добавим
00:08:20
две переменные экспорта, чтобы связать нашу игровую
00:08:22
сцену с танком и
00:08:26
пользовательским интерфейсом внутри нашей игровой сцены, давайте создадим
00:08:30
экземпляр нашей сцены пользовательского интерфейса,
00:08:32
и в наших переменных экспорта мы можем
00:08:35
назначить наш танк и наш пользовательский интерфейс. теперь, когда
00:08:38
они привязаны внутри нашей
00:08:41
функции готовности, давайте продолжим и обеспечим, чтобы
00:08:43
наши методы резервуара и пользовательского интерфейса могли быть связаны на
00:08:46
основе правильных сигналов, которые
00:08:47
резервуар излучает для нашего резервуара, мы возьмем
00:08:50
собранный сигнал и подключим
00:08:54
пользовательский интерфейс. в функции сбора теперь
00:08:58
рекомендуется проверить,
00:09:04
подключен ли этот сигнал, и если нет, он установит
00:09:07
это соединение теперь, когда мы подключили
00:09:09
наш пользовательский интерфейс к нашему резервуару, когда наш резервуар
00:09:12
собирает пикап, он должен принять
00:09:15
сигнал о том, что он был собран. и наш
00:09:17
уровень пользовательского интерфейса затем установит новую оценку и
00:09:20
обновит метку, убедитесь, что, когда вы
00:09:22
проверяете,
00:09:24
подключен ли сигнал, вы инвертируете это, чтобы сказать, что
00:09:27
он не подключен, прежде чем устанавливать
00:09:30
соединение, и если мы перезапустим,
00:09:35
мы увидим, что наша оценка сейчас
00:09:41
обновляется обратно в наш
00:09:44
пользовательский интерфейс, давайте добавим новый контейнер hbox внутри
00:09:47
нашего
00:09:49
контейнера vbox, он будет содержать наш
00:09:52
индикатор выполнения перезагрузки, мы собираемся использовать
00:09:55
индикатор выполнения текстуры, мы назовем это,
00:09:58
мы назовем это
00:10:01
прогрессом перезагрузки, идем дальше и дайте этому
00:10:02
уникальное имя, которое мы щелкнем и перетащим,
00:10:05
удерживая контроль, создайте
00:10:08
переменную onready для нашего индикатора выполнения перезагрузки,
00:10:11
чтобы отслеживать ход нашего
00:10:13
состояния перезагрузки внутри нашего скрипта, мы
00:10:15
собираемся добавить две
00:10:17
функции, одну для того, когда наши
00:10:19
тики прогресса перезарядки, которые установят
00:10:23
сигнал об этом от нашего оружия к нашему
00:10:26
танку, и это будет передаваться в ходе
00:10:29
нашего таймера перезарядки, и на этом мы можем
00:10:32
обновить значение прогресса перезарядки, равное
00:10:36
этому
00:10:37
прогрессу, мы также можем добавить индикатор перезарядки
00:10:43
функция, которая будет принимать
00:10:45
значение прогресса перезагрузки вместо единицы,
00:10:48
а для нашего значка перезагрузки мы будем использовать
00:10:50
спрайт боеприпасов с фоном и
00:10:52
изображением переднего плана. Если мы импортируем их в
00:10:55
наши
00:10:56
спрайты, мы можем использовать
00:10:58
текстуры индикатора процесса перезагрузки в нашем инспекторе. панель, мы
00:11:01
можем создать нижнее изображение, используя
00:11:05
текстуру атласа, и установив ее для нашего значка пользовательского интерфейса боеприпасов,
00:11:08
размер которого составляет 16
00:11:11
на 16
00:11:13
пикселей, мы можем скопировать эту
00:11:15
текстуру и установить ее в нашу
00:11:18
текстуру прогресса, чтобы сделать ее уникальной, мы можем
00:11:22
расширить ее и сместите это на 16 пикселей,
00:11:25
чтобы получить
00:11:27
изображение переднего плана, теперь давайте изменим некоторые настройки
00:11:29
нашего режима заливки, мы хотим, чтобы наш прогресс
00:11:32
начинался снизу и поднимался вверх,
00:11:34
мы хотим сделать это со значения,
00:11:37
которое начинается с нуля и доходит до единицы
00:11:40
мы будем делать это с шагом
00:11:42
0,1, мы установим значение по умолчанию, равное
00:11:47
единице, и если мы перейдем к нашему 2D-виду, мы
00:11:50
увидим, что наш прогресс перезагрузки ниже того,
00:11:53
где должен быть наш счет, давайте также добавим
00:11:56
к нашему счету текст по умолчанию
00:11:59
теперь равно нулю, чтобы связать наш прогресс перезарядки, нам
00:12:01
нужно добавить некоторые сигналы как к нашему
00:12:03
танку, так и к нашему оружию, чтобы сообщить
00:12:05
нашему пользовательскому интерфейсу, что танк был перезаряжен
00:12:07
или находится в процессе перезарядки.
00:12:09
Сначала мы хотим войти в наш танк и в
00:12:11
сцену оружия, наша сцена оружия имеет
00:12:14
свой таймер перезарядки и внутри нашего
00:12:16
сценария оружия. Мы добавим два
00:12:18
сигнала, наш первый сигнал будет называться
00:12:20
перезаряженным, чтобы информировать, когда это оружие
00:12:22
было перезаряжено, второй будет вызывать
00:12:26
ход перезарядки, и он будет обновляться как пока
00:12:29
таймер работает для нашей перезагрузки и
00:12:31
каков его текущий прогресс, чтобы отслеживать
00:12:34
прогресс нашей перезагрузки внутри нашего функционального
00:12:38
процесса, мы проверим, остановлен ли наш
00:12:42
таймер перезагрузки, если он не остановлен,
00:12:47
тогда мы собираемся отслеживать
00:12:50
прогресс перезагрузки, мы ' мы собираемся
00:12:52
выдать оставшееся значение или текущий
00:12:56
прогресс, который равен единице минус оставшееся
00:12:59
время нашего таймера перезагрузки, разделенное на
00:13:04
время ожидания нашего таймера перезагрузки. Это должно отображать
00:13:07
число от нуля до единицы для
00:13:10
текущего прогресса оставшегося времени
00:13:13
в дополнение к отправке нашего прогресса.
00:13:15
давайте продолжим и признаем, что всякий раз, когда наш
00:13:16
таймер перезарядки завершается, мы можем легко
00:13:19
сделать это в нашем тайм-ауте, после того как мы изменим
00:13:21
наше состояние, мы можем сказать, что сигнал перезарядки
00:13:25
излучается сейчас, когда наше оружие излучает как во
00:13:28
время перезарядки, так и в ходе
00:13:30
его перезарядки, которую мы хотим по сути, зеркально
00:13:32
отразите это в нашем танке, поэтому вставьте наш
00:13:35
танк, мы добавим два дополнительных сигнала
00:13:37
для
00:13:39
перезарядки, а также для
00:13:42
прогресса перезарядки, мы создадим
00:13:46
функцию готовности, которая принимает
00:13:48
сигнал перезарядки оружия и соединяется
00:13:53
с
00:13:55
функцией Lambda, которая вызывает свой собственный
00:13:57
сигнал перезарядки и это то, что вы узнаете больше о
00:14:00
функциях Lambda в
00:14:03
документации gd. Мы также хотим получить
00:14:05
сигнал о ходе перезарядки от нашего оружия,
00:14:10
и мы соединимся с другой
00:14:12
функцией Lambda, которая будет отслеживать прогресс
00:14:14
нашего оружия,
00:14:16
и мы будем передавать наш собственный
00:14:19
прогресс перезарядки. то же
00:14:23
значение прогресса. Это быстрый и простой способ
00:14:25
отразить сигнал от дочернего элемента,
00:14:27
такого как наше оружие, на
00:14:30
класс танка. Теперь в нашем пользовательском интерфейсе мы можем легко
00:14:33
связать созданные нами функции процесса перезарядки с
00:14:38
состоянием перезарядки танка. мы можем сделать это в нашей игре,
00:14:41
добавив дополнительный сигнал, чтобы проверить,
00:14:46
связан ли прогресс перезарядки нашего танка с
00:14:50
пользовательским интерфейсом при
00:14:53
прогрессе перезарядки, если нет, мы хотим пойти дальше и
00:14:56
установить его для подключения, вызвав
00:15:01
функцию подключения, которую мы можем скопировать это и сделайте это еще
00:15:03
раз для нашего перезагруженного
00:15:07
состояния, мы вызовем on reloaded в
00:15:11
нашем пользовательском интерфейсе, и если мы повторно запустим это, мы увидим, что у нас
00:15:15
есть новый пользовательский
00:15:17
интерфейс перезагрузки, и если мы
00:15:20
выстрелим, мы заметим, что он постоянно
00:15:24
перезагружается, мы вернитесь в наш редактор и
00:15:27
перейдите к нашему оружию,
00:15:29
мы выбираем таймер перезарядки, мы заметим,
00:15:31
что наш таймер не установлен на один выстрел,
00:15:35
это означает, что после завершения таймера
00:15:37
он запустится снова, мы уже настроили его
00:15:40
так, чтобы наш таймер перезарядки запускается
00:15:42
всякий раз, когда мы переходим в состояние стрельбы,
00:15:45
давайте продолжим и установим этот флажок, чтобы установить
00:15:47
его на один
00:15:48
выстрел. Это означает, что как только таймер закончится,
00:15:51
он не запустится автоматически,
00:15:54
и если мы вернемся к нашей игре и
00:15:56
продолжим стрелять, мы вы заметите, что пользовательский
00:16:01
интерфейс таймера перезагрузки обновляется
00:16:03
соответствующим образом, и у нас есть простой
00:16:06
пользовательский интерфейс. Обязательно воспользуйтесь сигналами, чтобы
00:16:08
легко связать поведение пользовательского интерфейса. Вы можете
00:16:11
легко связать несколько объектов вместе
00:16:13
с помощью сигналов и добавить поведение для обновления
00:16:16
элементов на экране, если вы понравилось
00:16:19
это видео, пожалуйста, поставьте нам лайк, а если
00:16:21
вы еще этого не сделали, подпишитесь
00:16:23
и получайте уведомления, когда у нас появляются новые видео,
00:16:26
и дайте нам знать в комментариях, если
00:16:27
есть что-то, что вы хотели бы, чтобы мы осветили в
00:16:28
следующий раз, еще раз спасибо за просмотр и счастья
00:16:32
кодирование

Описание:

In today’s video we’re going to continue our series on Godot Fundamentals. We’ll be adding a simple User Interface to our game which will include a Score which will increase when we pickup our collectables. We’ll also add a reload indicator to visualize the weapon’s reload status. 🌐 Check out the blog post for this video: https://gamedevartisan.com/tutorials/godot-fundamentals/ui-and-signals 🗋 View the source on Github: https://github.com/Game-Dev-Artisan/godot-fundamentals/releases/tag/ui-and-signals 💬 Join our growing Discord Community: https://discord.com/invite/p6fGxHEgrx ☕ Support my work by buying me a coffee: https://ko-fi.com/gamedevartisan 💬 Follow me on Twitter: https://twitter.com/GameDevArtisan

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

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

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

mobile menu iconКак можно скачать видео "Building a UI in Godot - Godot Fundamentals"?mobile menu icon

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

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

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

mobile menu iconКакой формат видео "Building a UI in Godot - Godot Fundamentals" выбрать?mobile menu icon

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

mobile menu iconПочему компьютер зависает при загрузке видео "Building a UI in Godot - Godot Fundamentals"?mobile menu icon

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

mobile menu iconКак скачать видео "Building a UI in Godot - Godot Fundamentals" на телефон?mobile menu icon

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

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Building a UI in Godot - Godot Fundamentals"?mobile menu icon

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

mobile menu iconКак сохранить кадр из видео "Building a UI in Godot - Godot Fundamentals"?mobile menu icon

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

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

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