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

Скачать "Making a MULTIPLAYER Game? Join your Players with LOBBY!"

input logo icon
Теги видео
|

Теги видео

unity multiplayer
unity multiplayer 2022
unity multiplayer tutorial
code monkey
unity tutorial
unity game tutorial
unity tutorial for beginners
unity 2d tutorial
unity 3d
unity
game design
game development
game dev
game development unity
unity 2d
unity 3d tutorial
programming
coding
c#
software development
learn to code
unity tutorials
how to make a game
unity lobby
unity netcode for game objects
unity gaming services
unity relay
unity join players
unitytutorial
unity3d
gamedev
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:00
привет и добро пожаловать, я ваша конусная обезьянка,
00:00:02
и давайте научимся использовать Unity
00:00:04
Lobby. Это их инструмент, помогающий вам
00:00:06
создавать онлайн-лобби для ваших
00:00:07
многопользовательских игр, к которым вы можете присоединиться
00:00:09
вместе со своими друзьями и начать
00:00:10
играть вместе в качестве хоста, которого вы можете
00:00:12
создать. Лобби дайте ему имя, сделайте его
00:00:14
общедоступным или частным, вы можете обновить
00:00:16
разблокированные данные, которые могут быть любыми,
00:00:17
например, режим игры, и как
00:00:20
игрок вы можете найти публичные лобби или
00:00:22
присоединиться к частному лобби с помощью кода, установив
00:00:24
некоторые фильтры или используйте быстрое присоединение для
00:00:26
автоматического присоединения. С помощью этих инструментов
00:00:28
можно обрабатывать все, что связано с
00:00:29
лобби и с этим связано. Есть
00:00:31
два других инструмента игровых сервисов Unity.
00:00:33
Я уже сделал чрезвычайно подробное
00:00:35
руководство о том, как использовать сетевой код для игровых
00:00:37
объектов, посмотрите это видео. чтобы узнать, как на
00:00:39
самом деле передавать данные между игроками
00:00:40
после завершения игры, а в
00:00:42
следующем видео я также расскажу об
00:00:44
инструменте Really, который поможет вам легко
00:00:45
подключать игроков, не требуя
00:00:47
IPS или переадресации портов, все три из
00:00:49
этих фильмов могут быть используются отдельно или
00:00:51
их можно использовать вместе очень
00:00:52
простым и простым способом, поэтому в этом видео давайте
00:00:55
узнаем все о лобби. Я собираюсь
00:00:57
сосредоточиться на пошаговой демонстрации простого
00:00:59
использования функций и демонстрации того, как
00:01:01
API работает без визуальных средств и в в конце
00:01:03
я также покажу визуальный образец,
00:01:05
который я создал сам, включая все
00:01:07
эти функции. Вы можете скачать
00:01:08
окончательную демо-версию, файлы проекта указаны
00:01:10
в описании, а также это видео
00:01:12
официально спонсируется игровыми
00:01:14
сервисами Unity. Это набор инструментов
00:01:16
для помощи. вы с легкостью создаете и развиваете
00:01:17
свои игры. Он включает в себя все
00:01:19
функции, которые я собираюсь упомянуть здесь.
00:01:21
Сетевой код для игровых объектов для добавления
00:01:23
многопользовательской игры в ваши игры.
00:01:24
Лобби для присоединения к игрокам, действительно для
00:01:27
их подключения. Также есть специальный
00:01:29
инструмент для игрового сервера, предназначенный для подбор игроков
00:01:31
vivox для голоса и текстовых сообщений, которые у вас есть.
00:01:34
Сохранение в облаке для хранения данных игроков в
00:01:36
облаке. Cloudcon-доставка для доставки
00:01:38
вашим игрокам.
00:01:44
эти инструменты
00:01:46
либо полностью бесплатны, либо имеют
00:01:48
щедрые уровни бесплатного пользования, поэтому щелкните ссылку в
00:01:50
описании, чтобы узнать больше об
00:01:51
игровых сервисах TNT и начать работу бесплатно,
00:01:53
хорошо, поэтому лобби первым шагом будет
00:01:56
установка пакета, поэтому давайте откроем
00:01:57
менеджер пакетов, а затем давайте поднимемся сюда,
00:01:59
в реестр объектов, а теперь просто
00:02:01
прокрутим вниз, пока не найдем
00:02:03
пакет лобби прямо здесь, и просто установим его.
00:02:05
Следующим шагом будет настройка проекта
00:02:07
со службами UNT, поэтому для этого давайте
00:02:10
перейдем к редактированию, затем к настройкам проекта, а затем
00:02:12
перейдите к в Службы теперь убедитесь, что вы
00:02:14
вошли в систему, если нет, вы можете нажать
00:02:16
кнопку здесь, в верхнем левом углу,
00:02:17
чтобы войти в систему, затем здесь вы можете создать
00:02:20
новый идентификатор ЛОР-проекта, чтобы вы могли сделать
00:02:22
это здесь или, если вы уже
00:02:24
создано на панели управления, давайте перейдем к
00:02:25
этому, затем выберите свою организацию,
00:02:27
выберите свой проект и свяжите проект,
00:02:29
окей, все, проект был связан,
00:02:32
теперь мы можем перейти на панель управления NT, и
00:02:34
здесь, с левой стороны, давайте перейдем
00:02:35
к многопользовательской игре, затем мы У нас есть все
00:02:37
инструменты для многопользовательской игры, давайте перейдем
00:02:39
в лобби и нажмите
00:02:41
кнопку здесь, чтобы включить
00:02:43
лобби, которое проведет вас через
00:02:45
руководство по настройке, поэтому давайте сначала выполним эти шаги.
00:02:47
Я свяжу ветку NT, чтобы мы
00:02:48
уже сделал это, давайте перейдем дальше, затем
00:02:50
установим пакет, мы тоже это сделали,
00:02:51
затем обязательно включите лобби,
00:02:54
и все, если хотите, вы можете
00:02:56
импортировать эти образцы, чтобы увидеть, как
00:02:58
работает лобби в контексте более крупного образца,
00:03:00
но пока давайте сделаем все проще для
00:03:02
этого видео, просто продолжим, закончим, и
00:03:03
все, базовая настройка выполнена
00:03:05
сейчас, вернемся к нашему проекту, давайте начнем
00:03:07
с создания нового сценария c-sharp,
00:03:10
назовем его тестовым лобби, давайте создадим игровой
00:03:12
объект для его запуска, здесь, давайте прикрепите
00:03:15
скрипт и откройте его, все в порядке, поэтому первое, что
00:03:17
нам нужно сделать, это инициализировать
00:03:18
сервисы Unity, поэтому давайте сделаем частный
00:03:20
запуск void и при запуске мы собираемся войти в
00:03:22
сервисы Unity, это внутри
00:03:25
unity.services.com,
00:03:27
давайте перейдем к этому один и просто вызовите
00:03:29
инициализацию async, теперь важно отметить,
00:03:31
что это ожидаемая функция, поэтому,
00:03:34
чтобы правильно ее запустить, давайте добавим
00:03:36
сюда вес, и как только мы добавим вес,
00:03:38
нам нужно убедиться, что эта функция
00:03:39
также помечена как асинхронная, если вы вы
00:03:41
не знакомы с асинхронным режимом, не
00:03:43
беспокойтесь об этом слишком сильно, вам не нужно
00:03:45
знать, как он работает, чтобы его использовать,
00:03:46
но, по сути, это
00:03:48
позволяет вам запускать код асинхронно,
00:03:50
например, вот это отправит
00:03:52
запрос ENT-службам для
00:03:54
инициализации API, этот запрос будет
00:03:56
передаваться через Интернет, поэтому он не будет
00:03:58
мгновенным, если вы не сделали эту асинхронность
00:04:01
и не использовали вес, тогда игра в
00:04:02
значительной степени зависнет и не будет
00:04:03
получена. ответ от сервера, тогда как,
00:04:05
используя эти ключевые слова таким образом,
00:04:07
игра не зависает, когда доходит до
00:04:09
этой точки, она отправляет запрос, а
00:04:11
затем просто приостанавливает выполнение этой
00:04:12
функции, а остальная часть игры продолжает
00:04:14
работать,
00:04:15
а затем, когда эта функция получает
00:04:16
затем ответ продолжает выполняться
00:04:18
здесь, но, как я уже сказал, вам не нужно
00:04:20
об этом беспокоиться, просто не забывайте
00:04:22
ключевые слова async и Away, хорошо, и это все
00:04:24
для инициализации этих служб,
00:04:26
тогда в лобби требуется аутентификация для
00:04:29
использования аутентификации ENT, есть масса
00:04:31
опций вы можете связать учетную запись Sim Apple
00:04:33
Android Facebook или открыть ID, чтобы вы могли
00:04:36
запросить у игрока доступ, чтобы
00:04:37
создать учетную запись и связать ее с любой
00:04:38
из этих служб, или что-то очень
00:04:40
крутое - вы можете просто выполнить очень быстрый
00:04:42
анонимный вход через здесь мы просто заходим
00:04:45
в службу аутентификации, эта
00:04:47
внутри аутентификации Unity Services,
00:04:50
затем давайте получим доступ к статическому экземпляру,
00:04:52
и теперь мы просто вызываем вход
00:04:55
анонимно асинхронно,
00:04:58
и снова это доступная константа,
00:05:00
давайте подождем в основном таким образом,
00:05:02
обычно он невидим для пользователя, поэтому
00:05:03
нет необходимости спрашивать у них какое-либо
00:05:05
имя пользователя или пароль, это просто происходит
00:05:06
автоматически, а в будущем, если
00:05:08
захотите, вы сможете обновить эту анонимную
00:05:10
учетную запись до учетной записи, связанной с любой
00:05:11
из этих служб,
00:05:13
хорошо, так что это будет анонимный вход
00:05:15
и создание новой учетной записи для этого. user,
00:05:17
мы можем прослушать событие, чтобы узнать, когда
00:05:19
завершится вход, поэтому давайте зайдем в
00:05:21
службу аутентификации внутри
00:05:23
экземпляра и давайте послушаем
00:05:25
событие входа в систему, поэтому
00:05:28
давайте сделаем аналог, говоря, что
00:05:31
мы вошли в систему
00:05:32
и можем получить
00:05:34
экземпляр службы аутентификации, и давайте получим
00:05:36
идентификатор игрока, так что это идентификатор игрока, который
00:05:38
был сгенерирован, хорошо, итак, у нас есть
00:05:40
все, что нам нужно, чтобы
00:05:41
начать работу в лобби, поэтому сначала
00:05:43
давайте займемся созданием
00:05:45
лобби, давайте сделаем это здесь функция, так что
00:05:48
приватная пустота создайте лобби,
00:05:50
затем здесь, чтобы создать, давайте зайдем внутрь
00:05:52
службы лобби внутри
00:05:55
unity.services.lovice, на этом давайте получим
00:05:57
доступ к экземпляру, а затем мы собираемся
00:05:58
посчитать функцию create Lobby async,
00:06:01
эта, как вы можете видеть, занимает
00:06:03
название лобби и максимальное количество игроков, поэтому
00:06:05
давайте определим здесь строку для
00:06:07
имени лобби, давайте назовем только мое лобби,
00:06:10
а затем для максимального количества игроков, и,
00:06:13
скажем, нам нужно четыре игрока, так что вот
00:06:15
здесь разблокирующее имя и
00:06:16
максимальное количество игроков,
00:06:18
хорошо, так что это создаст лобби и
00:06:20
снова отметит, насколько оно доступно, и
00:06:21
вернет объект типа Mobby,
00:06:23
поэтому давайте возьмем его, поэтому сначала
00:06:25
уберем его, а затем используем объект
00:06:28
типа Lobby, а вот этот прямо здесь, внутри
00:06:31
unity.services .love - это не модели, поэтому
00:06:33
это лобби, которое мы только что создали
00:06:34
и проверяем, что мы создали. Давайте посмотрим,
00:06:37
мы разоблачаем, просто чтобы увидеть это,
00:06:41
и еще раз, чтобы это работало, нам
00:06:43
нужно убедиться, что мы помечаем это как асинхронное,
00:06:45
хорошо, это Итак, этот код
00:06:47
создаст наше лобби. Одна очень
00:06:49
важная вещь заключается в том, что все
00:06:51
функции, связанные с лобби, все
00:06:52
они могут генерировать исключение, например,
00:06:54
если не удалось создать лобби или каким-то образом
00:06:56
не удалось подключиться к сервер лобби,
00:06:58
если мы не перехватываем это исключение, которое
00:07:01
может сломать всю нашу игру, мы не
00:07:02
хотим, чтобы это произошло, поэтому давайте завершим
00:07:05
это в хорошей попытке catch, поэтому попробуйте
00:07:07
поймать, и мы сможем перехватить исключение службы лобби типа
00:07:12
и просто сделать загрузите отладочную загрузку
00:07:15
именно так, на случай, если возникнет какая-либо ошибка,
00:07:17
мы сможем увидеть, что ее вызвало, хорошо, мы
00:07:19
почти закончили, и просто для тестирования
00:07:21
я собираюсь использовать квантовую
00:07:22
консоль, это отличный ресурс,
00:07:24
который позволяет вам легко добавьте консоль, прочитайте
00:07:26
журналы и функции триггера, однако я
00:07:28
должен отметить, что это не обязательно,
00:07:30
вы можете вызвать эту функцию лобби из
00:07:31
любого места, но в моем случае для тестирования
00:07:34
этого видео это должно быть очень полезно,
00:07:35
поэтому для того, чтобы она работала с этим
00:07:37
актив, я просто собираюсь добавить атрибут команды,
00:07:40
хорошо, давайте проверим, все ли в порядке,
00:07:42
и мы сразу видим, что
00:07:44
аутентификация работает, поэтому мы
00:07:45
вошли в систему, и это сгенерированный
00:07:47
идентификатор игрока, и теперь давайте вызовем
00:07:49
функцию так функция создания лобби,
00:07:51
давайте запустим эту функцию, и вы
00:07:53
создадите лобби с именем man Lobby
00:07:55
и с четырьмя игроками, хорошо, отлично, пока
00:07:58
все идет очень хорошо, мы
00:08:00
можем убедиться, что это не сработало,
00:08:01
разблокировав панель управления здесь, в
00:08:03
панель управления, если в разделе «Лобби» мы перейдем к
00:08:05
обзору, здесь у нас есть целая
00:08:07
куча сансов, и мы можем посмотреть и увидеть,
00:08:09
да, у нас есть один запрос прямо сейчас, и
00:08:10
здесь внизу мы можем увидеть запрос по типу, если
00:08:12
мы получили запрос на создание, хорошо отлично,
00:08:15
теперь, когда мы создали лобби,
00:08:17
следующим важным действием является поиск
00:08:19
лобби, поэтому давайте создадим еще одну функцию,
00:08:21
чтобы частный дроид назовем ее списком
00:08:23
лобби,
00:08:25
затем давайте зайдем внутрь лобби и получим
00:08:28
доступ к статическому экземпляру, и теперь это
00:08:30
называется запросом функции и Лобби является
00:08:32
асинхронным, и опять же, оно доступно
00:08:36
для параметров, которые вы видите, у нас есть
00:08:37
необязательный параметр, он предназначен для
00:08:39
фильтрации, если мы оставим его пустым, он
00:08:41
будет возвращаться только в лобби. Я
00:08:43
собираюсь продемонстрировать, как использовать фильтры
00:08:44
в немного, так что этот, как мы видим,
00:08:46
возвращает ответ на запрос, поэтому давайте
00:08:48
возьмем его, чтобы получить ответ на запрос,
00:08:51
и снова убедитесь, что этот помечен
00:08:53
как асинхронный, все в порядке, чтобы у нас был
00:08:56
ответ на запрос, и теперь мы можем зайти внутрь этого
00:08:58
и туда у нас есть результаты,
00:09:00
так что это хороший список, содержащий все
00:09:02
результаты, которые мы нашли,
00:09:04
поэтому давайте посмотрим здесь, в журнале отладки,
00:09:06
скажем, лобби найдено,
00:09:08
и результаты запроса подсчитаны, поэтому мы нашли
00:09:10
эти лобби, затем давайте просто пройдемся
00:09:12
по ним и распечатаем некоторые данные, поэтому
00:09:14
мы просто сделаем четыре дюйма для каждого лобби
00:09:18
в ответе на запрос к нашим результатам, и
00:09:21
для каждого из них давайте сделаем журнал входа в
00:09:24
лобби.имя и, возможно, скажем,
00:09:27
игроков лобби.макс,
00:09:29
хорошо, так как мы этого не сделали используйте любой фильтр,
00:09:31
это в основном будет запрашивать
00:09:33
каждое существующее лобби, теперь снова
00:09:35
не забудьте обернуть это внутри try catch,
00:09:38
иначе эта штука может сломать
00:09:39
всю игру, поэтому давайте обернем ее
00:09:43
и хорошо, давайте проверим и посмотрим, что это
00:09:45
делает, все в порядке, так что здесь мы
00:09:48
сначала вошли в систему, давайте выполним поиск, так что давайте
00:09:50
позвоним, давайте войдем в систему, выполним наш поиск, и да,
00:09:53
лобби найдено ноль, хорошо, имеет смысл, теперь
00:09:55
давайте создадим лобби, вот и все,
00:09:57
создано, и теперь мы снова снимем список, если
00:09:59
мы идем, мы нашли один log, чтобы убедиться,
00:10:01
что он действительно работает здесь. У меня
00:10:03
есть две сборки, так что давайте попробуем составить список
00:10:06
и нет, начиная с нуля, и на этом
00:10:08
послушайте, нет, также найден ноль, теперь
00:10:10
давайте создадим лобби, и вот и все, что
00:10:12
создано а теперь об этом
00:10:14
другом, если я снова в списке,
00:10:16
и если он появится, этот действительно нашел
00:10:18
лобби, поэтому мы убедились, что мы
00:10:19
действительно захватываем лобби с
00:10:21
главного сервера в Интернете, а не
00:10:22
что-то локальное, хорошо, отлично, и еще раз мне
00:10:25
следует обратите внимание, что, как я уже сказал
00:10:26
здесь, я просто тестирую API, но, как
00:10:29
вы можете себе представить, вы можете легко добавить
00:10:30
визуальный элемент ко всем возвращаемым значениям всех
00:10:32
этих функций, это то, что я собираюсь
00:10:34
продемонстрировать, когда буду демонстрировать if only
00:10:35
рабочий образец через некоторое время Одна
00:10:38
важная вещь о фильмах: они могут
00:10:40
стать неактивными, если не получат данных
00:10:42
в течение 30 секунд, поэтому лобби было
00:10:44
создано, прошло чуть больше 30
00:10:46
секунд, так что теперь, если я попробую
00:10:48
еще раз прослушать лобби, давайте посмотрите, находит ли он все еще
00:10:49
тот же самый,
00:10:51
и посмотрите, что
00:10:52
найдена нулевая лаборатория, поэтому лобби было создано,
00:10:55
но поскольку мы не отправляли никаких данных, мы
00:10:57
ничего не обновляли через 30 секунд,
00:10:59
оно стало неактивным, в
00:11:00
значительной степени неактивным означает что он
00:11:02
не отображается в поиске, поэтому новые игроки
00:11:04
не могут его найти, однако игроки, которые
00:11:06
уже находятся в лобби, они все равно могут получать
00:11:07
данные из этого лобби, теперь, начиная
00:11:10
игру, вы действительно хотите сохранить лобби
00:11:11
живым, пока все игроки не присоединятся, так что по
00:11:13
порядку чтобы поддерживать его в рабочем состоянии, нам нужно
00:11:15
отправить пульс, поэтому, когда мы создаем
00:11:17
новое лобби, давайте сохраним ссылку
00:11:19
на него, поэтому давайте поднимемся сюда, создав частное
00:11:22
лобби типа, назовем его хост-
00:11:24
лобби,
00:11:26
а затем здесь, когда мы создадим наше
00:11:28
лобби, мы получаем, что одно из хост-лобби
00:11:30
равно этому лобби, хорошо, и теперь
00:11:32
нам просто нужно запускать некоторую логику
00:11:34
каждые определенное время, чтобы
00:11:36
активировать функцию пульса, поэтому нам
00:11:39
нужно запускать некоторый код каждые x
00:11:40
времени и если хотите, вы можете сделать это в
00:11:42
подпрограмме Co, но лично мне не нравятся
00:11:44
сопрограммы, мне не нравится шаблон,
00:11:46
который они заставляют вас использовать, поэтому, если
00:11:48
хотите, вы можете использовать их, но что касается меня, я
00:11:50
просто собираюсь использовать базовый полный таймер, поэтому,
00:11:52
если вы просто собираетесь объявить плавающее значение
00:11:54
для таймера пульса,
00:11:57
тогда давайте сделаем частное обновление void,
00:12:00
а затем давайте создадим функцию-дескриптор
00:12:03
Heartbeat в лобби,
00:12:06
и мы собираемся запустить это при обновлении,
00:12:08
теперь вот просто сделайте немного базовый таймер, но,
00:12:11
очевидно, сначала проверьте, не знает ли хост-лобби,
00:12:13
поэтому, если у нас есть хост-лобби,
00:12:15
если да, отсчитайте таймер,
00:12:20
затем, если таймер истек,
00:12:23
если да, давайте сбросим таймер
00:12:28
сейчас для сердцебиения, как я уже сказал, любовь
00:12:30
становится неактивной после 30 секунд
00:12:32
бездействия, поэтому давайте отправим пульс,
00:12:34
скажем, каждые 15 секунд, поэтому для
00:12:36
фактической отправки пульса давайте зайдем в
00:12:38
службу лобби в благовониях
00:12:40
и вызовем асинхронную отправку пульса Peng,
00:12:42
тогда для этого потребуется идентификатор для
00:12:44
идентификатора лобби, поэтому давайте возьмем хост Лоббируйте и
00:12:46
передайте идентификатор,
00:12:48
и снова это доступно, так что давайте
00:12:50
подождем и сделаем это асинхронным, все в порядке, вот и
00:12:53
все, давайте проверим и посмотрим, останется ли наше
00:12:55
корейское лобби живым через 30
00:12:57
секунд, хорошо, поэтому прежде всего давайте перечислим
00:12:59
наши лобби, и нет, мы у меня нет ничего
00:13:01
отличного, давайте создадим новое лобби,
00:13:04
окей, давайте перечислим их еще раз, и да, все в
00:13:06
порядке, так что теперь давайте подождем 30 секунд,
00:13:09
окей, прошла почти минута, так что
00:13:11
давайте еще раз послушаем и посмотрим, живо ли оно еще
00:13:13
и живы ли они хорошо, что лобби
00:13:15
все еще живо, хорошо, отлично, поэтому наше лобби
00:13:17
больше не становится активным, как я уже
00:13:20
упоминал здесь, при выпуске
00:13:21
лобби вы можете при желании добавить несколько
00:13:22
фильтров, поэтому давайте посмотрим, как это сделать, чтобы эта
00:13:25
функция принимала параметр запроса типа
00:13:27
и параметры лобби Итак, давайте сделаем один из
00:13:29
этих запросов, и параметры лобби, которые
00:13:32
мы можем проверить на этот раз, чтобы увидеть, что он
00:13:34
содержит, здесь у нас есть куча
00:13:36
вещей, например, сколько результатов
00:13:37
мы хотим получить, какие из них мы хотим
00:13:39
пропустить, и, что важно, здесь у нас есть
00:13:41
фильтры и порядок, поэтому фильтры позволяют
00:13:44
нам сузить круг лобби, которые
00:13:46
мы хотим получить, поэтому давайте проверим
00:13:47
фильтр запроса здесь, на этом
00:13:50
фильтр запроса содержит параметры фильма,
00:13:52
значение и операцию для поля.
00:13:55
параметры, это поле, на которое он будет
00:13:57
действовать. Вы можете видеть, что есть некоторые
00:13:59
общие, поэтому вы можете фильтровать по количеству
00:14:00
максимального количества игроков. Вы можете фильтровать по количеству
00:14:02
доступных слотов. Вы можете фильтровать по
00:14:05
имени.
00:14:07
а затем эти значения от S1
00:14:10
до 5 и от N1 до пяти. Это в
00:14:12
основном пользовательские параметры, которые
00:14:13
вы можете определить самостоятельно. Конец просто
00:14:16
означает число, а сборка означает кольцо,
00:14:17
поэтому, например, при создании лобби вы
00:14:20
можете Определить поле S1, вы можете Определить
00:14:22
это один, например, игровой режим,
00:14:24
а затем при запросе лобби вы
00:14:26
можете фильтровать только те лобби, которые имеют
00:14:27
этот конкретный игровой режим, или, альтернативно,
00:14:30
с точки зрения чисел, которые вы могли бы иметь,
00:14:31
например, если бы вы знали что-то вроде
00:14:33
навыков игрока,
00:14:34
а затем он мог бы фильтровать для всех лобби
00:14:36
с навыками игрока в пределах определенного
00:14:38
количества, так что это все разрушения, теперь
00:14:40
давайте посмотрим, как на самом деле его использовать, поэтому здесь
00:14:42
мы создаем новый запрос и
00:14:43
параметры лобби, затем, как мы видели, например, мы
00:14:45
можем установить счетчик, скажем, мы хотели
00:14:46
получить всего 25 результатов, а затем для
00:14:49
фильтров, так что это список, поэтому давайте
00:14:51
создадим список фильтров запросов, а затем
00:14:54
здесь мы создадим столько
00:14:56
фильтров запросов, сколько захотим, поэтому, прежде всего, для
00:14:58
вариантов этого, давайте возьмем
00:15:01
доступные слоты затем для значения
00:15:04
давайте возьмем ноль, а затем для
00:15:06
операции здесь, как вы можете видеть, у нас
00:15:08
есть все виды операций, поэтому у нас есть
00:15:10
содержимое, если оно содержит это значение, у нас
00:15:13
есть равно больше или равно больше, чем
00:15:15
меньше или равно меньше, чем и не
00:15:18
равно, поэтому скажем, прямо сейчас мы хотим
00:15:20
отфильтровать все лобби, в которых есть хотя бы один
00:15:21
доступный слот, поэтому больше нуля, поэтому
00:15:24
давайте возьмем больше, чем и вот так,
00:15:26
как вы можете видеть, это список, чтобы
00:15:28
вы могли добавить как можно больше функций как вы
00:15:29
хотите, или мы можем добавить только один, так что, по сути, точно так же
00:15:31
это вернет нефтяные
00:15:33
лобби, у которых больше нуля
00:15:35
доступных слотов, и, кстати, на
00:15:37
самом деле это строка, хотя тогда это
00:15:39
не будет Парсоном до конца, но да
00:15:41
теперь принимает строку. Я сказал, что еще одна вещь, которую вы
00:15:43
можете сделать, это отсортировать результаты, чтобы здесь
00:15:45
мы могли установить порядок,
00:15:47
и еще раз, этот также находится в списке
00:15:50
и списке заказов запросов, поэтому давайте
00:15:51
сначала создадим новый порядок запроса, вы можете
00:15:54
установить его как по возрастанию true или false,
00:15:56
скажем false, чтобы сделать его нисходящим, а затем
00:15:58
для поля
00:16:00
давайте возьмем время создания лобби,
00:16:02
чтобы лобби в основном были отсортированы
00:16:04
от самого старого к самому новому, хорошо, поэтому
00:16:06
здесь мы определяем наши параметры, теперь мы просто
00:16:08
передаем их здесь в нашу функцию, вот
00:16:09
и все, как я уже упоминал
00:16:11
здесь, я на самом деле просто показываю вам,
00:16:13
как работать с API, как подсчитывать
00:16:14
функции и так далее, но, как вы можете себе
00:16:16
представить, в вашей игре у вас будет
00:16:18
пользовательский интерфейс и использование в пользовательском интерфейсе у вас будут
00:16:20
всевозможные кнопки для установки фильтров, а
00:16:21
затем с их помощью вы создадите
00:16:23
здесь эти параметры запроса и лобби. Теперь
00:16:25
для быстрого теста давайте попробуем создать
00:16:27
лобби только с одним игроком, что означает, что у
00:16:29
нас больше не будет игроков после того, как мы
00:16:31
присоединимся, когда мы создаем, так что давайте поднимемся сюда,
00:16:34
когда у нас будет лобби создания вместо
00:16:35
четырех игроков, давайте добавим только одного, хорошо, и вот теперь
00:16:38
он нашел с лобби, и
00:16:40
нет, ничего не найдено, хорошо, теперь давайте
00:16:42
создадим разблокировку, и да, это создано и
00:16:44
окончательный список, и вы идете также
00:16:46
нулевой телефон Лобби, потому что снова
00:16:48
нет лобби с хотя бы одним доступным
00:16:50
слотом, все в порядке, пока все хорошо, теперь
00:16:53
следующее, что мы хотим сделать, это иметь возможность
00:16:54
присоединиться к Лобби, так что давайте здесь создадим
00:16:57
еще одну функцию,
00:16:58
давайте создадим частную пустоту, вызовем ее, присоединимся к
00:17:01
лобби,
00:17:02
а затем здесь, чтобы присоединиться, мы
00:17:04
просто заходим в лобби, получаем доступ к экземпляру,
00:17:06
а затем у нас есть несколько функций соединения,
00:17:09
как вы можете видеть, у нас их две, поэтому
00:17:11
мы можно присоединиться к лобби, купить идентификатор, или мы можем
00:17:13
присоединиться по коду здесь, просто тест, к которому мы
00:17:16
можем присоединиться в лобби, давайте
00:17:17
присоединимся по идентификатору, и давайте просто
00:17:19
скопируем это, просто чтобы выполнить запрос, и присоединитесь к
00:17:21
самому первому лобби, так что просто быстро
00:17:23
тест, вот здесь сделайте ответ на запрос, найдите
00:17:25
первое, а затем зайдем внутрь,
00:17:27
давайте ничего не будем применять, поэтому нет лобби,
00:17:30
нет опций, сделайте это асинхронным, чтобы он
00:17:33
нашел любые лобби, а затем,
00:17:35
допустим, мы присоединимся к самому первому, так что давайте
00:17:37
перейдем к результатам по индексу 0, и мы
00:17:39
собираемся получить идентификатор, потому что мы используем присоединение к
00:17:41
лобби по идентификатору, и давайте подождем этого и
00:17:44
удалим журнал, хорошо, поэтому эта функция
00:17:46
должна иметь возможность присоединиться к самому первому
00:17:48
лобби, которое она найдет, поэтому позвольте мне просто добавить
00:17:50
команду здесь,
00:17:52
а затем давайте поднимемся сюда и добавим
00:17:54
еще несколько игроков, чтобы мы могли присоединиться к нему, хорошо,
00:17:57
давайте проверим,
00:17:58
так что здесь, с обеими сборками на этом,
00:18:00
давайте создадим лобби, хорошо, создадим сейчас
00:18:03
это, если мы, если мы не сможем
00:18:04
его увидеть, да и если мы используем
00:18:06
лобби присоединения, оно должно присоединиться к нему, поэтому давайте
00:18:08
щелкнем по любому из них, вы идете, это ничего не сделало,
00:18:10
потому что журнала нет, но да,
00:18:12
оно снова присоединилось к лобби, очевидно,
00:18:14
вы можете себе представить, как с правильным пользовательским интерфейсом вы
00:18:16
сначала визуальный список
00:18:18
лобби, после чего игрок щелкнет мышью, и
00:18:20
он присоединится к лобби на основе этого идентификатора,
00:18:22
именно так работает мой простой вариант, который
00:18:24
я снова собираюсь продемонстрировать через
00:18:25
некоторое время. Важной концепцией является
00:18:28
разница между общедоступным и частным такие
00:18:30
лобби, как название, подразумевают, что общедоступное лобби доступно для
00:18:32
поиска, поэтому присоединиться к нему может каждый, тогда как к
00:18:34
частному лобби можно присоединиться только
00:18:36
напрямую либо с помощью идентификатора, либо с помощью кода. То,
00:18:38
как мы определяем его как публичное или частное,
00:18:41
находится здесь, когда мы создаем лобби, поэтому у
00:18:43
нас есть эта функция, которая принимает
00:18:44
имя лобби, определяет максимальное количество игроков, а затем, как
00:18:46
мы видим, она также принимает параметры создания лобби,
00:18:48
поэтому давайте создадим один из них, посмотрим,
00:18:50
что он делает, поэтому мы создаем параметры лобби,
00:18:54
давайте зайдем внутрь, чтобы увидеть, что это
00:18:56
содержит, и да, это есть это, поэтому у нас
00:18:59
есть логическое значение для является частным, поэтому, если это
00:19:01
правда, то оно является частным, если оно
00:19:02
ложно, то оно публичное, тогда мы также получили
00:19:05
некоторую информацию об игроке,
00:19:06
созданном в лобби, и еще некоторые данные
00:19:07
для этого лобби мы собираемся увидеть эти
00:19:09
два немного позже, давайте просто
00:19:10
сосредоточимся на предотвращении, поэтому мы здесь, когда
00:19:12
создаем один, давайте вернем этому приватному состоянию значение
00:19:15
true,
00:19:16
поэтому мы собираемся создать частное
00:19:18
лобби, а затем, после создания, вы сможете
00:19:20
разблокировать, поэтому давайте также разблокируем лобби.id,
00:19:23
а также зарегистрируем код лобби.лобби,
00:19:27
и, конечно же, давайте обязательно
00:19:29
используем наши параметры создания лобби, все в
00:19:31
порядке, чтобы там было написано, что мы здесь,
00:19:34
и давайте создадим новое лобби
00:19:36
и вот оно создано с таким
00:19:38
именем, которое используют многие максимальные игроки, и здесь мы
00:19:41
видим большую строку для нашего идентификатора, а затем
00:19:43
меньшую для нашего красивого кода лобби, но,
00:19:45
что важно, мы сделали это частным, поэтому теперь
00:19:47
мы находим список лобби, и все готово.
00:19:50
Обнаружено нулевое лобби, потому что
00:19:51
оно снова настроено как частное и
00:19:53
не отображается для публики. Мы можем
00:19:55
присоединиться к этому частному лобби либо
00:19:57
через идентификатор, который, опять же, является
00:19:58
довольно сложной строкой, поэтому он не
00:20:00
очень полезен для отправка друзьям
00:20:02
и так далее, потому что у вас
00:20:05
гораздо короче и гораздо легче читать
00:20:06
код лобби, и это тот, который вы
00:20:08
можете отправить кому угодно, чтобы присоединиться к этому
00:20:09
частному лобби, хорошо, так что давайте спустимся
00:20:12
в наше присоединение Функция лобби вместо того, чтобы
00:20:14
присоединяться к самому первому после
00:20:15
запроса, давайте избавимся от этого и
00:20:17
добавим правильный параметр, давайте добавим
00:20:19
строку для кода лобби, а также
00:20:22
переименуем эту функцию, поэтому присоединитесь к лобби по
00:20:24
коду, а затем с этим давайте использовать другую
00:20:26
функцию, поэтому присоединитесь к лобби с помощью асинхронного кода, и
00:20:29
этот, как вы можете видеть, принимает строку
00:20:31
для кода лобби, поэтому давайте просто передадим
00:20:33
ее, чтобы код лобби,
00:20:35
затем давайте просто создадим журнал отладки, скажем,
00:20:38
присоединитесь к лобби с кодом, а затем код лобби,
00:20:42
хорошо, так что с с тестом щелей
00:20:44
все в порядке, так что здесь у меня есть оба баланса,
00:20:46
теперь на этом давайте назовем создание лобби,
00:20:48
и вы создадите длинное лобби, так что
00:20:51
теперь на другом, если я перечислю
00:20:53
лобби, никто не является частным, так что да, у некоторых из нас
00:20:55
нет разблокировку мы нашли, и в
00:20:57
этом случае давайте воспользуемся функцией «Присоединиться к
00:20:58
лобби по коду», а затем передадим
00:21:00
код, он не работает, так что
00:21:03
k3k6pp, давайте присоединимся, и если вы пойдете, мы
00:21:06
присоединимся к лобби с этим кодом, все в порядке.
00:21:08
Круто, все сработало, вот как
00:21:10
вы можно сразу присоединиться к лобби Далее давайте
00:21:13
посмотрим на одну действительно замечательную функцию лобби:
00:21:15
быстрое присоединение. Она идеально подходит для
00:21:16
очень быстрого вовлечения игроков в ваши игры
00:21:18
без необходимости спрашивать их, к какой
00:21:20
игре они хотят присоединиться. Быстрое присоединение к
00:21:22
вашему игроку просто нажмите кнопку, и
00:21:24
они мгновенно присоединитесь к лобби, чтобы сделать это,
00:21:26
давайте создадим еще одну функцию, поэтому Private
00:21:28
void, давайте назовем ее быстрым присоединением к лобби,
00:21:32
и здесь мы заходим в лобби, чтобы получить
00:21:34
доступ к экземпляру, и мы
00:21:37
собираемся вызвать функцию быстрого присоединения к
00:21:38
лобби асинхронно, как вы можете видеть это
00:21:41
с помощью этого есть несколько дополнительных опций, которые вы
00:21:43
можете отфильтровать, например, вы можете
00:21:45
иметь быстрое соединение только на определенной карте
00:21:47
или в определенном игровом режиме и т. д., но чтобы
00:21:49
сделать это очень простым, у вас действительно просто
00:21:51
есть эта функция, но, опять же, она
00:21:52
доступна так что давайте подождем, давайте сделаем это
00:21:54
асинхронным, и снова, как всегда, не забудьте
00:21:56
добавить try catch,
00:21:58
если вы это сделаете, то это может вызвать
00:22:00
исключение и сломать вашу домашнюю игру, так что
00:22:02
не забывайте об этом, хорошо, итак, у нас есть это,
00:22:04
позвольте мне просто сделать команду просто для
00:22:06
тестирования и давайте протестируем, поэтому здесь с обеими
00:22:09
сборками давайте создадим лобби, а затем в
00:22:12
этой давайте сделаем быстрое присоединение к лобби, и
00:22:15
если вы это сделаете, это не сработает, и,
00:22:16
кстати, вот хороший пример
00:22:18
ошибок
00:22:19
благодаря try catch игра не
00:22:20
сломалась, мы просто получили действительно хорошую
00:22:22
функцию ошибок, и в этом случае, как мы видим, она
00:22:24
говорит, что ей снова не удалось найти ни одного
00:22:26
открытого лобби, это потому, что мы
00:22:28
сделали это лобби распространенным, поэтому это
00:22:29
не может его найти. с помощью быстрого рисования
00:22:31
давайте просто быстро перейдем сюда, поднимемся в
00:22:33
лобби создания, и для этого давайте установим
00:22:35
приватность обратно в телефоны, чтобы сделать его
00:22:37
общедоступным,
00:22:38
так что теперь снова здесь, давайте создадим
00:22:40
в лобби,
00:22:42
и вы приступите к созданию, и на этом
00:22:44
давайте быстро присоединимся Лобби, и все,
00:22:45
оно быстро присоединяется, окей, отлично, так что
00:22:48
с этим у нас уже довольно много
00:22:49
работы, мы можем создавать лобби, мы можем
00:22:51
перечислять их и присоединяться к ним, но о
00:22:54
самой лаве у нас до сих пор нет данных. Один очень
00:22:56
интересный пример: у игроков есть нет
00:22:58
имени, мы можем увидеть всех игроков внутри
00:23:00
лобби, заглянув в этот
00:23:02
класс лобби, так что вот этот, если мы посмотрим,
00:23:04
мы увидим здесь, да, у нас есть список
00:23:08
всех наших игроков, а затем, если мы посмотрим
00:23:10
здесь, на определение
00:23:11
класса игрока, если вы посмотрите на этот, вы
00:23:13
увидите, что у нас есть информация о соединении с идентификатором,
00:23:15
урок о присоединении к идентификатору местоположения и т. д., как
00:23:17
вы можете видеть, у нас нет поля непосредственно
00:23:19
для имени, однако то, что оно есть,
00:23:22
находится здесь. действительно хороший словарь, так что,
00:23:24
по сути, это работает так: все
00:23:26
эти данные вы можете определить, поэтому вам
00:23:28
нужно решить, какие данные вы хотите
00:23:29
включить в каждого игрока, вы можете,
00:23:31
например, включить имя, которое вы можете
00:23:33
включить в какую-то загрузку, которую вы хотите может
00:23:34
включать в себя какой-то выбранный персонаж,
00:23:36
какой-то цвет значка, что угодно, это
00:23:39
словарь общего статуса, поэтому
00:23:40
вам решать, какие данные
00:23:42
должен иметь каждый игрок, давайте сначала просто
00:23:44
создадим функцию, которая будет распечатывать все
00:23:45
детали игрока, так что давайте спуститесь
00:23:47
сюда, создайте простую функцию,
00:23:49
давайте просто назовем ее print player,
00:23:53
и мы собираемся получить объект Lobby,
00:23:55
а затем давайте пройдемся по
00:23:58
player player в лобби, dot player,
00:24:03
итак, мы пройдемся по этому, и давайте сделаем
00:24:05
debug.log, и давайте скажем, например,
00:24:08
player.id и здесь, давайте посмотрим
00:24:11
журнал отладки и, скажем, игроки в лобби, а
00:24:15
затем распечатаем его в лобби.net,
00:24:17
хорошо, у нас есть эта замечательная
00:24:19
функция somper, поэтому здесь, когда мы создаем
00:24:21
лобби, у нас есть хост-лобби, затем
00:24:24
давайте вызовем эту функцию и передадим
00:24:26
хост-лобби,
00:24:28
хорошо, вот так, давайте посмотрим, что
00:24:31
это напечатает, и вот, если я просто создаю
00:24:33
лобби, вот и все, вот что
00:24:35
он сделал, так что он
00:24:36
создает лобби игроков в лобби, и
00:24:38
как вы мы видим, что это идентификатор этого
00:24:40
игрока, теперь давайте посмотрим, как мы можем
00:24:42
добавить в него наши правильные данные, как мы это
00:24:44
делаем, это на самом деле то, что мы видели некоторое время
00:24:46
назад, поэтому у нас есть параметры создания лобби,
00:24:48
и если вы помните, здесь, внутри,
00:24:49
мы У меня есть игрок, так что это
00:24:51
информация об игроке, который
00:24:53
создает это лобби, поэтому мы можем
00:24:55
просто добавить это внутрь,
00:24:57
давайте установим здесь равные игры, и
00:24:59
мы создадим совершенно нового игрока, а затем
00:25:01
для игрока возьмем все виды вещей,
00:25:03
поэтому для идентификатора давайте войдем в
00:25:05
службу аутентификации,
00:25:07
получим доступ к экземпляру и получим
00:25:09
идентификатор игрока,
00:25:11
а затем у нас есть данные, поэтому мы
00:25:13
создали словарь, поэтому
00:25:16
внутри мы можем добавить столько ключей, сколько
00:25:18
захотим, поэтому давайте добавим ключ для чего-то
00:25:20
вроде имени игрока, давайте назовем это, а
00:25:22
затем дадим ему имя игрока, и
00:25:24
просто для тестирования нам нужно убедиться,
00:25:25
что у нас разные имена, поэтому давайте
00:25:28
подойдем сюда, чтобы определить случайное имя,
00:25:30
поэтому приватная строка для имени игрока
00:25:32
и давайте назовем его, поместим код обезьяны, а
00:25:35
затем
00:25:37
выполним случайный диапазон движка Unity, чтобы
00:25:39
сгенерировать случайное число, скажем, 10
00:25:42
и 99, просто чтобы мы могли получить хорошее случайное
00:25:44
число с этим, редактор в сборке
00:25:46
должен иметь разные имена, давайте также
00:25:48
напечатаем это здесь в начале,
00:25:50
так что debug.log для имени игрока,
00:25:54
хорошо, итак, у нас это есть, а затем
00:25:56
давайте передадим имя игрока, равное
00:25:58
этому имени игрока, за исключением того, что это не
00:26:00
строка, а скорее мы должны создать
00:26:02
игрока, который объект затем внутри мы можем
00:26:04
определить видимость, этот у нас есть
00:26:07
три варианта: частный и общедоступный,
00:26:09
так что общедоступный просто, как вы ожидаете, чтобы этот
00:26:12
был виден всем, кто находится за пределами лобби.
00:26:14
Частный означает, что он виден только
00:26:16
хозяину лобби, и помните, что этот
00:26:18
видимый каждому участнику в лобби.
00:26:20
Я собираюсь рассказать об этом более подробно,
00:26:22
но сейчас давайте просто
00:26:24
сделаем его участником, чтобы он был виден каждому
00:26:25
участнику в этом лобби,
00:26:28
затем для тома давайте укажем
00:26:29
имя игрока и закроем это. и на самом деле для
00:26:32
идентификатора нам нужно либо отправить его сюда,
00:26:34
в Конструктор, либо, если вы
00:26:36
пропустите это, он не будет просто получать его
00:26:37
непосредственно из аутентификации, поэтому
00:26:39
давайте оставим все как есть, хорошо, в
00:26:41
основном с этим, когда мы создаем
00:26:42
Лобби, мы создаем лобби и
00:26:44
передаем игрока, который возводит в квадрат
00:26:45
неряшливость, и внутри этого класса игрока
00:26:47
мы определяем Дану,
00:26:48
определяем поле для имени игрока и
00:26:50
устанавливаем его для имени игрока,
00:26:52
так что пойдем сюда. в нашу
00:26:55
функцию печати игроков здесь мы
00:26:56
печатаем идентификатор игрока, а затем давайте
00:26:58
также распечатаем игрока, давайте зайдем в
00:27:00
данные и возьмем имя игрока.
00:27:03
Здесь содержится игрок, этот объект, так что
00:27:05
давайте зайдем внутрь и возьмем значение,
00:27:07
хорошо, давайте напечатаем его и посмотрите, действительно ли там
00:27:09
указано имя игрока,
00:27:11
создающего лобби, и на самом деле,
00:27:12
random.range, по-видимому, не может быть вызван
00:27:14
непосредственно из конструктора, поэтому
00:27:16
вместо того, чтобы генерировать имя здесь, давайте просто
00:27:19
скопируем это, сотрим это и определим
00:27:21
здесь имя игрока,
00:27:24
хорошо, так что давайте проверим, и вот мы здесь, и
00:27:26
это сгенерированное имя,
00:27:28
кодmonkey91, так что теперь, если мы создадим лобби,
00:27:31
и если мы выберем создание лобби,
00:27:33
и игроки внутри этого лобби будут иметь
00:27:35
этот идентификатор и это действительно красивое имя, хорошо,
00:27:37
теперь давайте убедимся это
00:27:39
также работает при
00:27:40
повторном присоединении для всех функций, которые нам нужны для
00:27:42
создания объекта игрока и передачи его,
00:27:44
например, здесь, когда у нас есть
00:27:46
лобби присоединения по коду, например, на этом у
00:27:49
нас есть функция, которую мы берем
00:27:51
код лобби, а затем у нас также есть
00:27:52
опция, поэтому нам нужно также включить ее,
00:27:54
поэтому присоединяйтесь к лобби с помощью параметров кода, поэтому давайте
00:27:57
создадим один из них,
00:28:00
а затем здесь у нас есть игрок, так что
00:28:01
это игрок, который присоединяется,
00:28:03
и вместо копирования и вставки тонна
00:28:05
кода, давайте на самом деле создадим функцию,
00:28:06
возвращающую новый объект игрока,
00:28:09
так что давайте просто сделаем что-то вроде этого
00:28:10
настолько конфиденциальным, что будем возвращать игрока, поэтому
00:28:12
получите player
00:28:14
и здесь просто верните нового игрока,
00:28:16
делающего именно это, хорошо, так что теперь давайте использовать
00:28:19
эту функцию, так что здесь, вместо того, чтобы
00:28:20
найти, что давайте вызовем get player,
00:28:23
окей, вот так, а затем здесь, когда
00:28:26
мы присоединяемся, давайте поместим то же
00:28:27
самое, player get player, а затем мы просто
00:28:29
передадим это туда,
00:28:32
окей, мы сделаем это и, наконец, давайте также
00:28:35
распечатаем наш игроки просто видят всех
00:28:37
игроков внутри, поэтому мы присоединяемся к лобби и
00:28:38
печатаем игроков внутри этого лобби, так что
00:28:40
этот фактически возвращает лобби для
00:28:42
лобби присоединения, и это именно этот, так что
00:28:46
давайте распечатаем вот так, хорошо, давайте проверим,
00:28:49
все в порядке, вот оба кости,
00:28:51
это Code Monkey 56, а это
00:28:53
Code Monkey 80. хорошо,
00:28:55
давайте создадим лобби, и да, вот и все, в
00:28:57
лобби есть этот код, так что давайте
00:28:59
используем его, чтобы присоединиться, так вот, давайте присоединимся к
00:29:02
лобби,
00:29:03
давайте запиши gdme ej, давай присоединимся,
00:29:06
и если мы присоединимся, и там мы
00:29:09
увидим оба имени обоих наших игроков,
00:29:11
все в порядке, и благодаря этому у наших игроков
00:29:14
теперь есть несколько собственных имен, в основном
00:29:16
то, что мы здесь сделали, мы определили некоторые
00:29:18
данные для каждого игрока, как я уже сказал это может быть
00:29:20
все, что вы хотите, например,
00:29:23
имя игрока или, может быть, в игре вроде
00:29:25
Legends, возможно, вы
00:29:27
сохраните выбранного игроком Чемпиона, или,
00:29:29
возможно, в такой игре, как Battlefield, вы
00:29:31
можете сортировать игрока и загрузку по своему усмотрению.
00:29:33
видел, что он использует словарь, поэтому вы можете
00:29:34
хранить все, что хотите,
00:29:36
а другой тип данных, который вы можете
00:29:38
хранить, находится в самой разблокировке, так что,
00:29:40
например, это будет игровой режим,
00:29:41
который, очевидно, вам не нужен один игровой
00:29:43
режим для каждого игрока, которого вы нужен только один игровой
00:29:45
режим для внутреннего лобби. Мы
00:29:47
настраиваем его практически
00:29:48
одинаково, поэтому давайте перейдем к созданию лобби, и
00:29:51
здесь у нас есть параметры создания лобби,
00:29:53
и если мы проверим это еще раз,
00:29:55
мы увидим то же самое, поэтому у
00:29:57
нас есть словарь наших данных, поэтому
00:29:59
при создании лобби давайте создадим, давайте
00:30:01
поместим данные и создадим новый
00:30:04
словарь,
00:30:05
и в словарь добавим запись,
00:30:08
поэтому для строки для нашего ключа, скажем,
00:30:11
наш игровой режим
00:30:12
и затем для нашего объекта данных давайте
00:30:14
создадим его снова, нам нужно передать
00:30:16
видимость, поэтому снова ссылка на насос означает, что
00:30:18
он виден всем, кто не является частным,
00:30:21
означает, что он виден только этому хосту, а
00:30:23
собственный участник виден людям внутри
00:30:24
лобби, поэтому для игрового режима вы хотите, чтобы он быть
00:30:27
общедоступным, вы хотите, чтобы оно отображалось в
00:30:29
браузере сервера, чтобы люди могли выбирать, к
00:30:31
какому адресу электронной почты они хотят присоединиться,
00:30:33
поэтому давайте сделаем его общедоступным, а затем для
00:30:35
значения, скажем, захватить флаг,
00:30:39
я также должен отметить, что есть еще один
00:30:41
последний необязательный параметр: один для
00:30:42
индекса,
00:30:43
а этот, как вы можете видеть, у нас есть
00:30:45
строки от одного до пяти и числа от одного
00:30:47
до пяти, как мы видели некоторое время назад для
00:30:49
поиска, это индексы, которые
00:30:51
там используются, чтобы вы могли Определить этот
00:30:53
игровой режим, определить это
00:30:55
индекс S1, а затем здесь, при прослушивании
00:30:57
лобби, вы можете создать фильтр,
00:30:59
давайте поместим его прямо здесь, скажем,
00:31:01
вы можете создать новый фильтр запросов,
00:31:04
создать поиск вещей и давайте
00:31:07
искать S1, который мы
00:31:09
используем здесь, чтобы вы могли искать это,
00:31:12
затем для фильма, скажем, захват флага
00:31:16
и, наконец, для операций, которые мы будем использовать
00:31:18
с равными, поэтому, используя этот
00:31:20
фильтр запроса, вы в основном найдете только все
00:31:22
лобби, которые захватили
00:31:24
флаг в своем игровом режиме. так что для более
00:31:26
сложного варианта использования эти индексы очень
00:31:28
полезны, но сейчас для этой простой демонстрации
00:31:29
давайте удалим это и просто поместим так,
00:31:31
просто простой игровой мод,
00:31:33
и все, вот как мы можем назначить
00:31:36
некоторые данные, которые мы хотим наше
00:31:38
совершенно новое лобби, давайте спустимся сюда, в
00:31:40
проигрыватели для печати, и давайте также распечатаем
00:31:41
его, чтобы у нас
00:31:43
было название лобби, затем давайте
00:31:45
также распечатаем в лобби, давайте возьмем данные,
00:31:47
возьмем режим игры
00:31:49
и значение внутренней гравитации, а также появятся,
00:31:52
когда мы выводим список лобби, так что давайте
00:31:54
посмотрим на это, слушаем лобби, напечатайте
00:31:56
имя, максимальное количество игроков, а также давайте
00:31:58
напечатаем в режиме гравитации данных лобби
00:32:01
и напечатаем значение, окей, давайте посмотрим вот так,
00:32:04
хорошо, итак, давайте создадим
00:32:06
лобби, и если оно будет создано, оно будет создано. и
00:32:09
мы можем видеть игроков в лобби с
00:32:11
именем man Lobby и игровым режимом захвата
00:32:12
флага, и если мы делаем аналитические лобби,
00:32:15
да, мы также видим, да, есть лобби
00:32:17
с захватом флага, причина, по которой
00:32:19
было найдено два, заключается в том, что я случайно запустил
00:32:21
создание Лобби дважды, но да,
00:32:23
с этим все работает, теперь мы знаем, как устанавливать
00:32:25
данные для каждого игрока и фиолетовые данные, но,
00:32:28
конечно, здесь мы отправляем
00:32:30
эти данные только тогда, когда создаем лобби,
00:32:31
очевидно, вы также хотите иметь возможность
00:32:33
обновлять их после Лобби
00:32:35
создано, вы хотите иметь возможность изменять
00:32:36
режим игры, имя и так далее, поэтому
00:32:39
давайте создадим функцию для обновления игрового
00:32:40
режима, поэтому давайте спустимся сюда, давайте создадим
00:32:43
частный режим обновления игры void,
00:32:45
фактически переименуем его, чтобы обновить
00:32:48
игровой узел лобби хорошо,
00:32:49
тогда давайте получим строку для игрового
00:32:52
режима
00:32:53
и для обновления, давайте зайдем в лобби
00:32:56
и вызовем update Lobby
00:32:58
асинхронно, это в первую очередь принимает
00:33:01
идентификатор лобби, так что на самом деле здесь мы
00:33:03
уже храним наше хост-лобби, так что давайте
00:33:05
возьмем это Давайте спустимся сюда, используем
00:33:07
этот список со всеми идентификаторами точек, а затем у
00:33:10
нас есть параметры лобби обновления, поэтому
00:33:12
давайте создадим объект этого типа,
00:33:16
и здесь мы можем установить данные и
00:33:19
перейдем к совершенно новым данным, поэтому игровой
00:33:21
режим
00:33:22
и давайте создадим новый
00:33:29
и сделаем это вот так, и, как обычно,
00:33:31
давайте поместим это в try catch, так что
00:33:34
попробуйте catch,
00:33:35
окей, поэтому мы обновим лобби с этим идентификатором, и
00:33:38
мы собираемся изменить игровой режим, затем
00:33:40
давайте напечатаем игроков, которые собираюсь
00:33:41
распечатать совершенно новый игровой режим,
00:33:43
хотя на самом деле он этого не сделает,
00:33:45
потому что, если есть две проблемы с синхронизацией, первая из них заключается в том,
00:33:47
что этот объект лобби является
00:33:50
классом, но он не обновляется
00:33:51
автоматически, вместо этого вам нужно в значительной
00:33:54
степени получить тот, который возвращается из
00:33:55
службы лобби,
00:33:57
поэтому при обновлении это возвращает лобби, поэтому
00:33:59
давайте обновим наше хост-лобби тем,
00:34:01
которое мы получаем здесь,
00:34:02
поэтому давайте добавим это в это, и на
00:34:05
самом деле это весовое значение, поэтому
00:34:06
давайте подождем асинхронности, вот
00:34:08
так, когда мы распечатайте, мы должны
00:34:10
увидеть обновленный игровой режим,
00:34:12
и вот мы здесь, и если мы создадим лобби,
00:34:15
если там будет «Захват флага», хорошо, отлично,
00:34:17
теперь давайте обновим в режиме игры в лобби,
00:34:19
скажем, это совпадение,
00:34:21
и если вы это сделаете, обновите, хорошо,
00:34:23
отлично. еще одна вещь: если у вас
00:34:25
здесь несколько фрагментов данных, вам
00:34:27
нужно назначить только те, которые вы
00:34:28
хотите обновить, например, давайте
00:34:30
поднимемся сюда, когда мы создадим лобби, давайте
00:34:32
создадим новый фрагмент данных, скажем,
00:34:35
карту, а
00:34:36
затем то же самое, и вы, этот объект,
00:34:38
давайте также опубликуем его, и скажем,
00:34:41
мы находимся на Dust 2,
00:34:45
хорошо, у нас есть карта, а затем здесь,
00:34:47
при обновлении режима EM, мы хотим
00:34:49
обновить только игровой режим, поэтому при печати
00:34:51
давайте также распечатаем карту
00:34:52
и убедитесь, что карта все еще существует,
00:34:54
поэтому данные лобби, давайте возьмем карту и
00:34:57
значение, хорошо, давайте посмотрим на это, и вот,
00:34:59
если мы создадим лобби, и да, вы
00:35:02
тоже захватите флаг на этом, хорошо,
00:35:03
теперь давайте обновим в лобби
00:35:06
игровой режим, давайте переключим его на «Завоевание»,
00:35:08
и если он выйдет, игровой режим обновился,
00:35:11
но карта не обновилась, поэтому, по сути,
00:35:13
здесь при обновлении вам не нужно
00:35:15
включать каждый фрагмент данных,
00:35:17
вам нужно включать только то, что
00:35:18
вы хотите изменить хорошо, похоже, что
00:35:20
это работает, но, как я уже сказал,
00:35:22
здесь есть еще одна хитрая проблема, давайте сделаем
00:35:24
быстрый журнал, чтобы постоянно видеть данные лобби,
00:35:26
поэтому давайте продолжим наше обновление, давайте на
00:35:29
самом деле распечатаем, чтобы мы не хотели видеть
00:35:31
лобби хоста но также скажем, лобби присоединения,
00:35:35
так что у нас есть это, и когда
00:35:37
лобби хоста изменится, оно окажется здесь, когда вы
00:35:39
его установите, давайте снова установим лобби присоединения равным
00:35:41
лобби хоста, мы просто хотим
00:35:43
сохранить ссылку на лобби, к которому мы
00:35:45
только что присоединились, поэтому на этом, когда мы
00:35:47
обновляем лобби хоста, давайте также поставим
00:35:49
это равным этому, а затем
00:35:51
здесь, скажем, код присоединения на
00:35:53
этом, когда вы присоединяетесь к лобби, давайте
00:35:55
также обновим это, поэтому давайте переименуем это
00:35:57
в лобби, а затем поместим вас в лобби
00:35:59
соответствует этому лобби, все в порядке, так что
00:36:01
теперь это у нас есть на печати. ​​Игроки, давайте на
00:36:03
самом деле сделаем еще одну версию этой
00:36:05
функции, чтобы печатать игроков без
00:36:07
параметров, и мы просто собираемся вызвать
00:36:09
Печать игроков и передать лобби присоединения,
00:36:12
тогда давайте просто сделаем это команда просто
00:36:14
для того, чтобы мы могли ее протестировать, хорошо, таким образом
00:36:16
мы можем вручную запустить этот журнал,
00:36:18
давайте посмотрим, что это делает, вот здесь
00:36:19
есть обе сборки, теперь давайте
00:36:22
создадим лобби, которое оно создаст, и
00:36:24
присоединитесь к нему, и вот вы ладно,
00:36:26
этот присоединился сейчас на этом,
00:36:28
давайте вызовем присоединение к лобби и передадим
00:36:31
код для присоединения к этому лобби, давайте присоединимся,
00:36:34
и если да, то он присоединился, чтобы мы могли
00:36:36
видеть Code Monkey 76 и 30, так что этому
00:36:38
30, этому 76 окей, отлично, и вот,
00:36:41
если я вызову эту функцию, напечатайте
00:36:42
игроков
00:36:43
здесь, мы уже видим одну проблему, но
00:36:46
давайте сделаем другую вещь, давайте обновим в
00:36:48
режиме игры в лобби, давайте изменим эту функцию на
00:36:50
Deathmatch, и все, эта
00:36:52
кажется обновленной, так что все готово у
00:36:54
него есть этот матч вместо «Захвата
00:36:55
флага», но теперь давайте
00:36:58
вызовем игроков «Печать» и посмотрим, что
00:37:00
делает этот,
00:37:01
и все, этот все еще говорит «
00:37:03
захватите флаг», поэтому мы обновили игровой
00:37:05
режим в лобби, но у этого игрока, очевидно,
00:37:07
есть понятия не имею, что произошло, этот игрок
00:37:10
не знает, что данные лобби
00:37:11
каким-либо образом изменились, он все еще думает, что
00:37:13
режим игры привязан к флагу,
00:37:14
а не к Deathmatch, здесь
00:37:16
важно помнить, что лобби не является своего
00:37:19
рода соединением в реальном времени. например
00:37:20
сетевой код для игровых объектов, что означает, что он
00:37:23
не обновляется автоматически, чтобы
00:37:25
обновить что-либо, например игровой режим,
00:37:27
карту или что-то еще. Для этого вам
00:37:29
нужно вручную заложить обновления, поэтому
00:37:32
давайте создадим еще одну функцию с
00:37:33
простым таймером, чтобы мы могли заложить для обновления
00:37:36
давайте сделаем частный пустой дескриптор
00:37:40
Тон лобби для обновлений,
00:37:43
кстати, очевидно, что есть некоторые
00:37:44
ограничения по скорости, когда дело доходит до опроса, вы
00:37:46
не можете получать 60 раз в секунду, вы можете
00:37:48
увидеть ограничения скорости здесь, в
00:37:50
документации библиотеки, поэтому для опроса
00:37:52
обновлений мы может выполнять один запрос в секунду
00:37:54
здесь только к таймеру и еще раз, если
00:37:57
хотите, вы можете использовать для меня сопрограмму.
00:37:59
Я собираюсь сделать еще один базовый таймер для фотографий,
00:38:02
чтобы частный плавающий таймер обновления лобби,
00:38:05
а затем работал здесь, в значительной степени. точно
00:38:08
такая же логика, так что на самом деле это скопируйте это
00:38:09
напрямую, просто замените его, поэтому мы собираемся
00:38:11
протестировать это в лобби присоединения, а затем
00:38:14
для таймера обновления лобби, давайте заменим
00:38:16
все это, так что это и
00:38:19
теперь для таймера обновления лобби. Макс
00:38:24
для этот, как мы видели, мы можем
00:38:25
обновлять только один раз в секунду, поэтому давайте установим это
00:38:28
значение на 1,1 секунды, просто убедитесь, что оно
00:38:31
не достигает предела,
00:38:32
поэтому мы делаем это, а затем функция, которую
00:38:34
мы собираемся использовать, - это
00:38:35
асинхронная функция get Lobby и этот, как
00:38:38
вы можете видеть, собирается вернуться в лобби,
00:38:40
поэтому давайте передадим идентификатор присоединения к лобби, и
00:38:42
этот вернет лобби лобби, и еще раз
00:38:45
помните, что этот класс не обновляется автоматически,
00:38:47
поэтому давайте заменим наше лобби присоединения
00:38:50
этим лобби и еще раз этим это
00:38:52
вес, поэтому давайте сделаем это асинхронным, и,
00:38:55
наконец, нам просто нужно вызвать это
00:38:56
здесь, в нашем обновлении, окей, вот и все,
00:38:59
обновления должны получать каждую
00:39:01
секунду, так что давайте проверим,
00:39:02
итак, давайте создадим лобби, и
00:39:05
да, вот оно включено этот давайте присоединимся к
00:39:07
лобби,
00:39:09
используйте ключ,
00:39:10
хорошо, он присоединился к лобби, мы захватим
00:39:12
флаг и так далее, и, как мы видели некоторое время
00:39:14
назад, если я вызову игроков печати,
00:39:18
он не будет обновляться, он не будет показывать,
00:39:19
что это другие игроки присоединился, но теперь, когда
00:39:21
мы добавили опрос, это должно
00:39:22
работать, поэтому, если мы нажмем Enter, если пойдет,
00:39:24
этот действительно видит, что там два игрока, так что
00:39:26
теперь на этом, если я попытаюсь
00:39:28
обновить режим лобби, скажем,
00:39:30
Deathmatch, вот и все.
00:39:33
этот обновляется
00:39:34
сразу, а на этом просто нужно
00:39:36
подождать одну секунду, а затем распечатать игроков, и
00:39:38
если он выйдет, этот получит
00:39:40
обновление, так что теперь этот знает, что
00:39:41
игровой режим очень классный,
00:39:43
поэтому они оба получили обновление все
00:39:44
работает, данные хорошо
00:39:46
синхронизируются, и, конечно, поскольку мы можем
00:39:49
обновить данные в лобби, чтобы мы могли
00:39:50
обновить режим разблокировки игры, мы
00:39:52
также можем обновить всех игроков, чтобы они
00:39:54
работали почти одинаково,
00:39:55
так что давайте спустимся вниз. здесь создадим еще одну
00:39:57
функцию,
00:39:59
такую ​​гордую, Droid, давайте назовем ее, обновим
00:40:01
имя игрока и получим строку для
00:40:03
имени нового игрока,
00:40:05
а также обновим переменную
00:40:07
там, где имя игрока равно новому имени игрока,
00:40:10
тогда нам просто нужно зайти в
00:40:12
экземпляр службы лобби и давайте обновим
00:40:14
асинхронный игрок, а не игрок в лобби, для этого
00:40:17
требуется идентификатор лобби, поэтому давайте используем join
00:40:19
лобби.id,
00:40:20
затем идентификатор игрока, поэтому давайте зайдем в
00:40:22
службу аутентификации,
00:40:24
возьмем экземпляр и идентификатор игрока,
00:40:26
и, наконец, у вас есть параметры обновления игрока
00:40:30
и на этом давайте обновим данные
00:40:33
и поместим то же самое, что
00:40:34
мы видели здесь, поэтому давайте посмотрим на функцию,
00:40:36
в которой мы получаем игрока, чтобы мы получили
00:40:38
эти данные, давайте обновим эти данные, давайте
00:40:41
поместим имя игрока и используем нашего нового
00:40:42
игрока имя еще раз, давайте поместим это
00:40:44
в хорошую попытку, чтобы убедиться,
00:40:47
что ничего не сломается, наконец, сделайте это
00:40:50
весом и здесь асинхронным
00:40:53
и обратите внимание, что это также возвращается в
00:40:55
лобби, поэтому, если вы хотите обновить
00:40:56
мгновенно, вы можете получить это или,
00:40:59
поскольку мы уже обновленный опрос, мы можем
00:41:00
просто подождать одну секунду, и он не будет
00:41:02
обновляться автоматически, так что давайте проверим и посмотрим,
00:41:04
сможем ли мы обновить имя игрока, итак, мы
00:41:06
здесь, давайте создадим лобби, затем в этом
00:41:08
давайте присоединимся к лобби,
00:41:10
затем в этом давайте вызовем обновление
00:41:12
имени игрока и допустим, что
00:41:14
теперь это Железный Человек,
00:41:16
семь обновлений, и оно уже должно было быть загружено,
00:41:18
поэтому, если мы перейдем к печати игроков,
00:41:19
да, теперь это Железный Человек, и на этом то же самое,
00:41:21
если мы напечатаем игроков, да, вот и
00:41:23
все. это Арманд, все в порядке,
00:41:25
здорово, поэтому мы можем обновлять как
00:41:27
данные игрока, так и данные лобби, теперь следующая
00:41:29
важная способность - это возможность
00:41:31
просто покинуть лобби, поэтому давайте создадим
00:41:34
функцию, которая
00:41:35
не может просто покинуть лобби,
00:41:38
и тогда это довольно просто мы
00:41:40
просто заходим в экземпляр службы лобби
00:41:42
и просто вызываем команду удаления игрока
00:41:44
асинхронно, он принимает идентификатор лобби, поэтому
00:41:47
давайте передадим присоединиться к лобби.id,
00:41:50
а затем идентификатор игрока, поэтому давайте зайдем в
00:41:51
службу аутентификации
00:41:54
и возьмем этот идентификатор игрока,
00:41:56
как обычно сделайте это весом, сделайте это
00:41:59
асинхронным
00:42:00
и давайте добавим try catch,
00:42:04
все в порядке, так что это довольно просто.
00:42:06
Давайте проверим, так что на этом здесь,
00:42:09
давайте создадим лобби, затем на этом
00:42:12
здесь, давайте присоединимся к лобби,
00:42:14
хорошо, оба игрока в настоящее время находятся внутри
00:42:16
этого Лобби, поэтому напечатайте игроков, но оба
00:42:18
игрока сейчас там, на этом игроке,
00:42:20
давайте вызовем выход из лобби и здесь,
00:42:23
давайте распечатаем его снова, чтобы распечатать слои, и
00:42:25
если вы пойдете, этот игрок не ушел,
00:42:27
хорошо, теперь эта функция, как вы можете
00:42:30
видеть, принимает идентификатор для игрока, если это
00:42:32
этот идентификатор игрока, то, очевидно, отображаются
00:42:34
листья, но если этот код работает на
00:42:37
хосте, то, по сути, с его помощью вы
00:42:38
можете выгнать некоторых игроков,
00:42:40
поэтому давайте создадим функцию, чтобы опробовать это,
00:42:42
так что приватная пустота, давайте назовем это кик-
00:42:44
игроком,
00:42:45
а затем закончим Давайте сделаем то
00:42:47
же самое и просто щелкнем
00:42:49
второго игрока,
00:42:50
итак, давайте перейдем в лобби присоединения,
00:42:53
давайте возьмем игроков и возьмем
00:42:55
второго игрока, так как первый
00:42:57
будет хостом, поэтому давайте сделаем это так же,
00:42:59
как это
00:43:01
хорошо, давайте проверим здесь, давайте
00:43:04
создадим новое лобби, затем в этом,
00:43:07
давайте присоединимся к нему, хорошо, оба сейчас
00:43:10
внутри, в
00:43:11
этом давайте выгоним другого
00:43:13
игрока и распечатаем игроков, и
00:43:16
да, только этот внутри, и еще один
00:43:19
очень важная вещь здесь, об
00:43:21
игроке, которого кикнули, у нас нет никакого
00:43:22
события или чего-то еще, помните, что
00:43:25
лобби не является соединением в реальном времени,
00:43:27
все основано на вытягивании, и то, что происходит,
00:43:30
когда игрока кикнут, именно для
00:43:31
этого и вытягивает Lobby просто возвращает no, по сути,
00:43:33
появляется, когда мы вызываем get Lobby async.
00:43:36
Объем данных, которые мы получаем в этом
00:43:38
объекте Lobby, зависит от того, являемся ли мы участником или нет,
00:43:40
что снова возвращается к
00:43:42
параметрам видимости, которые мы видели здесь, так как этот
00:43:44
объект удален и больше не является участником,
00:43:46
когда мы вызываем это, мы все еще можем видеть
00:43:48
игровой режим на карте, но мы не можем видеть,
00:43:50
какие игроки находятся внутри, поэтому, если мы попытаемся
00:43:52
напечатать игроков, это значение будет
00:43:53
нулевым, поэтому у нас будет
00:43:55
известный ссылка здесь, здесь, если я попытаюсь
00:43:57
распечатать игроков, да, вот и нет
00:44:00
ссылки, теперь вы можете
00:44:02
подумать, что произойдет, если
00:44:03
хост решит уйти, и ответ: в
00:44:06
лобби есть автоматическая миграция хоста, поэтому
00:44:09
оба игрока в настоящее время находятся там
00:44:11
вы идете 63 и 17, да, оба находятся в одном и том
00:44:14
же лобби, и на этом
00:44:16
хосте давайте просто покинем лобби, и
00:44:18
вы пойдете, хост налево, и на
00:44:20
этом, если мы вызовем игроков печати, если туда пойдут,
00:44:23
только этот находится внутри, а этот
00:44:25
теперь один стал хостом, если
00:44:27
в лобби несколько игроков, тогда
00:44:28
хост выбирается случайным образом, а также
00:44:30
здесь вы можете видеть, что произошла ошибка,
00:44:32
потому что мы все еще пытаемся отправить
00:44:34
пульс, хотя мы уже
00:44:35
разблокировали его, поэтому мы' теперь вы больше не
00:44:37
хост, альтернативно вы также можете
00:44:39
вручную выполнить миграцию хоста, поэтому давайте
00:44:42
вызовем функцию, которая перенесет хост лобби,
00:44:47
и для этого мы сделаем это почти
00:44:49
точно, обновив данные лобби, поэтому мы
00:44:52
здесь обновляем игровой режим. Давайте
00:44:53
на самом деле скопируем все это, давайте перейдем
00:44:55
сюда, и мы собираемся вызвать обновление
00:44:57
moabi async, давайте просто сделаем это асинхронным,
00:45:00
и здесь, если мы проверим
00:45:02
параметры лобби обновления, здесь, если мы прокрутим
00:45:05
вниз, мы увидим, что да, у нас есть идентификатор хоста,
00:45:07
так что это это идентификатор игрока, который является
00:45:09
хозяином этого лобби, поэтому
00:45:11
вместо изменения режима игры,
00:45:14
скажем, мы хотим изменить идентификатор хоста, и,
00:45:17
например, давайте сделаем второго игрока
00:45:18
хоста, поэтому давайте
00:45:20
просто возьмем идентификатор второго игрока вот так, хорошо,
00:45:23
давайте протестируем здесь, давайте создадим
00:45:26
лобби, затем в этом, давайте присоединимся к нему,
00:45:29
а затем вернемся к этому здесь, в
00:45:32
этом, давайте позвоним моему замечательному хосту лобби,
00:45:36
окей, он сделал это, и теперь, например, если мы
00:45:39
попытаемся обновить режим игры в лобби. Давайте
00:45:41
попробуем изменить это на Deathmatch, и
00:45:44
вот, у нас возникла ошибка. Мы
00:45:46
видим, что у этого пользователя нет
00:45:47
прав на обновление в лобби. Еще у
00:45:50
вас может возникнуть еще один вопрос: что произойдет,
00:45:51
если все покинут лобби и
00:45:53
ответ прост: лобби
00:45:54
автоматически удаляется, если внутри никого нет,
00:45:57
оно удаляется, и если вы хотите,
00:45:59
вы также можете удалить его вручную самостоятельно,
00:46:01
поэтому давайте создадим функцию удаления лобби,
00:46:06
а затем это довольно просто, просто
00:46:08
зайдите в службу лобби, экземпляр
00:46:10
и просто вызовите delete и Lobby async, и
00:46:12
это принимает идентификатор лобби, так что давайте передадим
00:46:14
присоединиться к лобби.id,
00:46:22
хорошо, вот и все, давайте проверим, так что на этом
00:46:25
здесь внизу я создал лобби на этом
00:46:27
здесь, наверху, я присоединился и здесь,
00:46:29
давайте удалим это Лобби
00:46:32
и да, все готово, и, как
00:46:34
вы можете видеть, мы получаем ошибки, потому что
00:46:35
лобби было удалено, все в
00:46:37
порядке,
00:46:38
так что все возможности
00:46:40
инструмента лобби действительно потрясающие, прежде чем я
00:46:42
продемонстрирую свой окончательный образец, давайте просто
00:46:44
быстро посмотрим в ценах
00:46:46
здесь находится страница цен на игровые сервисы Unity,
00:46:47
и если мы прокрутим вниз и
00:46:50
найдем Лобби, так что да, здесь
00:46:53
слева есть уровень бесплатного пользования, а
00:46:54
справа — уровень оплаты, и, как вы
00:46:56
можете видеть, как обычно, есть очень щедрый
00:46:58
уровень бесплатного доступа
00:46:59
за рубежом, у вас есть 10 гигабайт
00:47:01
бесплатно в месяц на каждую группу регионов,
00:47:04
что является довольно огромной суммой. Лобби
00:47:06
использует очень мало данных, поэтому, если ваша
00:47:08
игра не станет массовым хитом, она, скорее всего, будет для
00:47:10
вас совершенно бесплатной, так что, наконец, вот
00:47:13
образец, который я создал с использованием всех
00:47:14
этих функций. Вы можете скачать этот
00:47:16
образец и проверить исходный код.
00:47:18
Поскольку вы просмотрели все это видео,
00:47:20
вы сможете легко прочитать весь
00:47:21
код в образце. Основной сценарий
00:47:23
— это лобби. менеджер, и здесь
00:47:26
есть почти все функции,
00:47:27
которые мы уже видели, например, функция для
00:47:29
обработки пульса лобби, одна для
00:47:31
опроса, получение лобби присоединения и т. д.,
00:47:33
создание лобби, поэтому все те же
00:47:34
функции, которые мы только что видели
00:47:36
поверх него, некоторые элементы пользовательского интерфейса, которые подключаются
00:47:38
к этому классу, например, здесь у нас
00:47:40
есть пользовательский интерфейс списка лоббирования. У меня есть
00:47:43
простой контейнер внутри. У меня есть
00:47:44
шаблон с названием лобби, количеством
00:47:46
игроков и режимом игры. Какой
00:47:47
шаблон учетной записи красивый это всего лишь
00:47:49
локальный префаб, поэтому этот шаблон
00:47:52
дублируется, чтобы создать больше или
00:47:53
меньше записей, есть кнопка обновления
00:47:56
и кнопка для создания нового лобби
00:47:57
здесь, в этом сценарии пользовательского интерфейса, когда я нажимаю
00:48:00
кнопку обновления, этот вызывает эту
00:48:02
функцию
00:48:03
и затем эта функция просто обращается к
00:48:05
11-му менеджеру и обновляет
00:48:06
список разблокировки, так что этот выполняет
00:48:09
запрос лобби, почти так же, как мы видели,
00:48:11
находит все лобби, а затем запускает
00:48:13
событие и передает список
00:48:15
фильмов, а затем сценарий пользовательского интерфейса. здесь он
00:48:18
просто слушает это событие, поэтому
00:48:19
список разблокировки изменился, поэтому, когда это
00:48:22
происходит, он просто идет сюда, уничтожает
00:48:24
предыдущие Олимпийские игры в списке и добавляет
00:48:25
новые, так что, как вы можете видеть,
00:48:27
буквально это просто очень простой скрипт пользовательского интерфейса,
00:48:29
построенный поверх него. из всех функций,
00:48:30
которые мы уже видели, кстати, вы,
00:48:32
очевидно, можете сделать автоматическое обновление списка. Я на
00:48:35
самом деле сделал этот код, так что здесь, в
00:48:36
диспетчере разблокировки, если мы прокрутим вниз
00:48:38
до обновления, мы обрабатываем
00:48:40
обновление списка входа в систему, тогда для этого
00:48:42
что этот код очень прост.
00:48:44
Службы HX Affinity были инициализированы,
00:48:46
и если игрок вошел в систему, если да,
00:48:48
просто отсчитайте простой таймер и
00:48:50
вызовите эту функцию. Я просто прихожу к этому,
00:48:52
потому что я запускаю несколько сборок
00:48:54
на одной машине, так что означает, что все
00:48:56
запросы лобби поступают с одного и того
00:48:57
же IP-адреса, поэтому, если бы я включил
00:48:59
автоматическое обновление для нескольких сборок, я
00:49:01
бы в конечном итоге был ограничен по скорости, поскольку
00:49:03
каждый экземпляр будет делать слишком много
00:49:05
запросов, но в финальной игре, да, вы
00:49:07
бы использовали именно это, так что при
00:49:09
запуске двух сборок сначала запрашивается
00:49:11
имя игрока, а затем появляется кнопка для
00:49:12
аутентификации в зависимости от того, что я
00:49:14
здесь делаю. Вы видите простой трюк, позволяющий
00:49:16
демо-версии работать с несколькими сборками на
00:49:18
одном ПК, если вы просто проходите аутентификацию
00:49:20
автоматически вы не всегда будете получать один и
00:49:21
тот же идентификатор игрока, что может
00:49:23
вызвать проблемы, потому что вы не можете присоединиться к
00:49:25
одному и тому же лобби с одним и тем же идентификатором, поэтому здесь
00:49:27
я просто добавил очень простую логику, чтобы
00:49:29
я мог нажать на эту кнопку, чтобы
00:49:30
отредактировать имя игрока, скажем,
00:49:32
это Железный Человек, кстати, это окно ввода
00:49:34
- это то, что я сделал в предыдущем
00:49:36
видео, поэтому с его помощью я могу легко изменить
00:49:38
имя, а затем, когда я нажимаю на
00:49:39
аутентификацию, он запускает эту функцию, которая
00:49:41
принимает строку для имя игрока и
00:49:43
здесь просто создает объект с
00:49:45
параметрами инициализации типа, а здесь
00:49:47
используется имя игрока для установки
00:49:49
профиля, а затем оно используется здесь
00:49:50
для инициализации сервисов Unity таким образом,
00:49:53
даже при запуске нескольких сборок на одном и
00:49:55
том же компьютере они получаются разными. идентификаторы игроков,
00:49:56
так как они снова используют разные профили.
00:49:58
Я делаю это только для демонстрации, просто
00:50:00
заставьте его работать с несколькими машинами скорой помощи на
00:50:01
одном компьютере, если вы специально не хотите
00:50:04
реализовать профили, нет необходимости
00:50:05
делать это в вашей финальной игре, хорошо, так что с
00:50:07
обоими это давайте аутентифицироваться и
00:50:09
аутентифицироваться, теперь вот этот, давайте
00:50:11
создадим лобби, поэтому просто нажмите
00:50:12
кнопку «плюс» и отобразится этот приятный пользовательский интерфейс,
00:50:15
затем все обычные настройки, которые мы
00:50:17
видели, используются для создания лобби, поэтому
00:50:18
давайте отредактируем имя лобби,
00:50:20
давайте назовите это мое веселое лобби,
00:50:23
тогда я могу сделать его общедоступным или частным,
00:50:25
давайте сделаем его общедоступным, включим любое количество
00:50:27
игроков, скажем, пять игроков
00:50:29
и режим, который захватывает
00:50:31
конкурс эстакад, и просто нажмите «
00:50:33
Создать», и все, лобби
00:50:34
создано. Итак, теперь об этом, если я обновлю,
00:50:36
и если вы пойдете, я увижу, что
00:50:38
лобби моего телефона захватывает флаг
00:50:39
с одним из 5 игроков, а затем, просто
00:50:42
посмотрев здесь, он присоединится к лобби,
00:50:43
он просто вызовет эту функцию,
00:50:46
которая будет чтобы присоединиться к лобби по идентификатору,
00:50:48
просто присоединитесь, и вам нужно идти.
00:50:50
Это пользовательский интерфейс лобби, он очень
00:50:52
похож на бесконечный пользовательский интерфейс, вместо
00:50:54
очевидного списка, теперь у него просто
00:50:56
список всех игроков, пока
00:50:58
я внутри лобби. Я могу видеть всех других
00:50:59
игроков внутри этого лобби, и я не
00:51:02
вижу красивого значка персонажа, которого
00:51:03
они снова используют. Это пользовательские
00:51:05
данные, которые вы можете определить. Я только что определил
00:51:07
кое-что для персонажа, так что давайте скажем
00:51:09
об этом здесь, если я Я хочу использовать
00:51:11
морского пехотинца, но здесь позвольте
00:51:12
мне сказать, что я хочу использовать ниндзя, так что
00:51:14
поехали, я нажимаю эту кнопку,
00:51:15
данные игрока обновляются, и это передается
00:51:18
всем игрокам, а затем на хосте
00:51:20
также есть еще несколько кнопок, которые
00:51:21
скрыты от клиентов, вот эта
00:51:23
кнопка, которая переключает игровой
00:51:25
режим, поэтому, если я нажму на нее, вы начнете,
00:51:26
одна из них становится завоеванием, и да,
00:51:28
одна получает обновление, а другая кнопка
00:51:30
позволяет мне выгнать
00:51:31
игрока, поэтому, если я нажму на это,
00:51:33
и если это произойдет, этого игрока выгнали
00:51:35
из этого лобби, в качестве альтернативы у меня
00:51:37
здесь есть кнопка, чтобы покинуть лобби, поэтому, если
00:51:39
я нажму на нее, я вернусь к списку, и
00:51:41
если мы обновим, мы не могу найти лобби,
00:51:42
потому что снова все в левом лобби
00:51:44
Лобби было удалено, окей, как вы можете видеть,
00:51:47
все функции здесь работают над
00:51:49
этой очень простой демонстрацией. Я могу создавать
00:51:51
лобби с другими, я могу искать
00:51:53
лобби, я также могу присоединиться к ним, я могу присоединиться
00:51:56
с несколькими игроками я могу изменить своего
00:51:58
персонажа. Я могу выкинуть некоторых из своего
00:52:01
лобби.
00:52:02
Я могу снова обновиться до другого и
00:52:04
т. д., так что в нем есть все функции, которые
00:52:06
мы видели, за исключением применения к красивому пользовательскому интерфейсу,
00:52:09
вы можете загрузить файлы проекта и,
00:52:10
возможно, используйте это в качестве отправной точки для
00:52:12
вашего следующего множителя, хорошо, так что это
00:52:14
лобби. Это действительно потрясающий инструмент для
00:52:16
управления вашими многопользовательскими лобби, поскольку вы
00:52:18
можете видеть, что он чрезвычайно функционален,
00:52:20
позволяя вам делать все, что вам нужно,
00:52:21
из лобби, и все это довольно просто
00:52:23
использовать, например Я упоминал, что
00:52:25
инструменты игровых сервисов UNT очень хорошо работают друг с
00:52:27
другом, так что следите за обновлениями для следующего видео,
00:52:29
где я объясню, как это на самом деле работает
00:52:32
и как создать многопользовательскую игру с
00:52:33
ретранслятором лобби и сетевым кодом для игровых объектов,
00:52:36
хорошо, надеюсь, это будет полезно, посмотрите
00:52:38
эти видео, чтобы узнать больше, спасибо
00:52:40
этим замечательным сторонникам patreon за то, что
00:52:42
сделали эти видео возможными, спасибо
00:52:44
за просмотр, увидимся в следующий раз,
00:52:49
за ​​рубежом

Описание:

❤ Watch my FREE Complete Multiplayer Course https://www.youtube.com/watch?v=7glCsF9fv3s ✅ Learn more about Lobby and UGS https://unity.com/products/lobby 🌍 Get the Project Files https://unitycodemonkey.com/video.php?v=-KDlEBfCBiU 📝 Lobby Docs https://docs.unity.com/ugs/manual/lobby/manual/unity-lobby-service 🌍 Get my Complete Courses! ✅ https://unitycodemonkey.com/courses.php 👍 Learn to make awesome games step-by-step from start to finish. 👇 Click on Show More 🎮 Get my Steam Games https://unitycodemonkey.com/gamebundle.php 🎮 Wishlist my Next Steam game! https://store.steampowered.com/app/2177230/Total_World_Liberation/ 🔴 RELATED VIDEOS 🔴 COMPLETE Unity Multiplayer Tutorial (Netcode for Game Objects) https://www.youtube.com/watch?v=3yuBOB3VrCk Multiplayer through FIREWALL with Relay! (Unity Gaming Services) https://www.youtube.com/watch?v=msPNJ2cxWfw What is Unity Gaming Services? https://www.youtube.com/watch?v=JwClCc2_zC8 EASY Console! Run any Command! (Add Cheats, Set Gravity, Spawn Enemies Quantum Console Asset Review) https://www.youtube.com/watch?v=bOf6CjpuSFs Simple Text Input Field Window in Unity (Submit Score, Name) https://www.youtube.com/watch?v=4n6RT805rCc 💬 Let's learn how to use Unity Lobby to connect our players together before starting the game. You can create a new Lobby, make it public or private, then players can find it either through a Lobby browser or by inputting a Lobby code. You can then define whatever data you want for the Lobby and each Player. Things like Game Mode, Map, Teams or for the Player you can have Selected Character, Loadout, Color, etc. This is a really easy to use tool that you can add to your Multiplayer games to make it easy for players to find one another. This also easily integrates with Netcode for Game Objects which I've already covered, and Relay which I will cover in the next video. 📝 Some Links are Affiliate links which means it costs the same to you and I get a nice commission. 🌍 Get Code Monkey on Steam! 👍 Interactive Tutorials, Complete Games and More! ✅ https://store.steampowered.com/app/1294220/ If you have any questions post them in the comments and I'll do my best to answer them. 🔔 Subscribe for more Unity Tutorials https://www.youtube.com/channel/UCFK6NCbuCIVzA6Yj1G_ZqCg?sub_confirmation=1 See you next time! 📍 Support on Patreon https://www.patreon.com/unitycodemonkey 🎮 Grab the Game Bundle at https://unitycodemonkey.com/gamebundle.php 📝 Get the Code Monkey Utilities at https://unitycodemonkey.com/utils.php -------------------------------------------------------------------- Hello and Welcome! I'm your Code Monkey and here you will learn everything about Game Development in Unity using C#. I've been developing games for several years with 8 published games on Steam and now I'm sharing my knowledge to help you on your own game development journey. I do Unity Tutorials on just about every topic, Unity Tutorials for Beginners and Unity Tutorials for Advanced users. You can see my games at www.endlessloopstudios.com -------------------------------------------------------------------- - Other great Unity channels: Unity - https://www.youtube.com/user/Unity3D Brackeys - https://www.youtube.com/user/Brackeys Dani - https://www.youtube.com/channel/UCIabPXjvT5BVTxRDPCBBOOQ Jabrils - https://www.youtube.com/channel/UCQALLeQPoZdZC4JNUboVEUg BlackthornProd - https://www.youtube.com/channel/UC9Z1XWw1kmnvOOFsj6Bzy2g Sykoo - https://www.youtube.com/user/SykooTV Jason Weimann - https://www.youtube.com/channel/UCX_b3NNQN5bzExm-22-NVVg Jonas Tyroller - https://www.youtube.com/channel/UC_p_9arduPuxM8DHTGIuSOg -------------------------------------------------------------------- - Website: https://unitycodemonkey.com/ - Twitter: https://twitter.com/UnityCodeMonkey - Steam: https://store.steampowered.com/developer/EndlessLoopStudios

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

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

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

mobile menu iconКак можно скачать видео "Making a MULTIPLAYER Game? Join your Players with LOBBY!"?mobile menu icon

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

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

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

mobile menu iconКакой формат видео "Making a MULTIPLAYER Game? Join your Players with LOBBY!" выбрать?mobile menu icon

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

mobile menu iconПочему компьютер зависает при загрузке видео "Making a MULTIPLAYER Game? Join your Players with LOBBY!"?mobile menu icon

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

mobile menu iconКак скачать видео "Making a MULTIPLAYER Game? Join your Players with LOBBY!" на телефон?mobile menu icon

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

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Making a MULTIPLAYER Game? Join your Players with LOBBY!"?mobile menu icon

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

mobile menu iconКак сохранить кадр из видео "Making a MULTIPLAYER Game? Join your Players with LOBBY!"?mobile menu icon

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

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

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