Важно: UNet — это устаревшее решение, а также новая многопользовательская и сетьсистема Unity, которая обеспечивает многопользовательскую игру. игры через компьютерную сеть. Подробнее См. в Словарь Решение (Netcode для GameObjects) находится в разработке. Дополнительную информацию и дальнейшие действия см. на веб-сайте Unity Netcode for GameObjects. |
В многопользовательских играх используется концепция видимости сети, чтобы определить, какие игроки могут видеть, какие GameObjects фундаментальный объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь в любой момент игры. В игре с движущейся точкой обзора и движущимися игровыми объектами игроки часто не могут одновременно видеть все, что происходит в игре.
Если конкретный игрок в определенный момент игры не может видеть большинство других игроков, неигровых персонажей или другие движущиеся или интерактивные объекты в вашей игре, организатору обычно не нужно отправлять информацию об этих вещах клиенту игрока.
Это может принести пользу вашей игре двумя способами:
Это уменьшает количество данных, передаваемых по сети между игроками. Это может помочь улучшить отзывчивость вашей игры и уменьшить использование полосы пропускания. Чем больше и сложнее ваша многопользовательская игра, тем важнее этот вопрос.
Это также помогает** предотвратить взлом**. Поскольку у клиента игрока нет информации о вещах, которые нельзя увидеть, взлом компьютера этого игрока не может раскрыть эту информацию.
Идея «видимости» в контексте сети не обязательно связана с тем, видны ли игровые объекты непосредственно на экране. Вместо этого он относится к тому, следует или не следует отправлять данные о рассматриваемом игровом объекте конкретному клиенту. Проще говоря, если клиент не может «видеть» GameObject, ему не нужно отправлять информацию об этом GameObject по сети. В идеале вы хотите ограничить объем данных, которые вы отправляете по сети, только тем, что необходимо, потому что отправка больших объемов ненужных данных по сети может вызвать проблемы с производительностью сети.
Однако точное определение того, действительно ли GameObject виден данному игроку, может быть ресурсоемким или сложным, поэтому часто рекомендуется использовать более простые вычисления для определения того, следует ли отправить игрока. сетевые данные об этом - то есть, является ли он «Видимым в сети». Баланс, которого вы хотите достичь при рассмотрении этого, заключается в стоимости сложности расчета для определения видимости и стоимости отправки большего количества информации, чем необходимо, по сети. Очень простой способ вычислить это — проверка расстояния (близости), и Unity предоставляет для этой цели встроенный компонент.
Компонент проверки сетевой близости
Компонент Unity Network Proximity Checker – это самый простой способ обеспечить видимость сети для игроков. Он работает в сочетании с системой физики, чтобы определить, достаточно ли близко находятся игровые объекты (то есть «видимы» ли они для целей отправки сетевых сообщений в многопользовательской игре).
Чтобы использовать этот компонент, добавьте его в Prefabтип ресурса, который позволяет хранить GameObject вместе с компонентами и характеристики. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов на сцене. Подробнее
Посмотрите в Словарь сетевого игрового объекта, для которого вы хотите ограничить видимость в сети.
Проверка близости к сети имеет два настраиваемых параметра видимости:
Диапазон видимости определяет пороговое значение расстояния, в пределах которого сеть должна считать игровой объект видимым для игрока.
Интервал обновления визуальной информации определяет, как часто будет выполняться проверка расстояния. Значение представляет собой задержку в секундах между проверками. Это позволяет оптимизировать проверку, чтобы выполнять как можно меньше тестов. Чем меньше число, тем чаще происходят обновления. Для медленно движущихся игровых объектов вы можете установить этот интервал на более высокие значения. Для быстро движущихся игровых объектов следует установить более низкие значения.
Вы должны прикрепить Colliderневидимую форму, которая используется для обработки физических столкновений объекта. Коллайдер не обязательно должен быть точно такой же формы, как сетка объекта — грубое приближение часто бывает более эффективным и неразличимым в игровом процессе. Подробнее
Просмотрите в компоненте Словарь любые игровые объекты, которые вы хотите использовать с Network Proximity Checker. .
Видимость сети на удаленных клиентах
Когда игрок на удаленном клиенте присоединяется к сетевой игре, на этом удаленном клиенте будут создаваться только игровые объекты, видимые игроку по сети. Это означает, что даже если игрок входит в большой мир со множеством сетевых игровых объектов, игра может начаться быстро, потому что ей не нужно создавать каждый игровой объект, существующий в мире. Обратите внимание, что это относится к сетевым объектам GameObject в вашей СценеСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь, но не влияет на загрузку Активов. Unity по-прежнему требуется время для загрузки ресурсов для зарегистрированных префабов и игровых объектов сцены.
Когда игрок перемещается по игровому миру, набор видимых в сети игровых объектов меняется. Клиенту игрока сообщается об этих изменениях по мере их возникновения. Сообщение ObjectHide** ** отправляется клиентам, когда GameObject перестает быть видимым в сети. По умолчанию Unity уничтожает GameObject, когда получает это сообщение. Когда GameObject становится видимым, клиент получает сообщение ObjectSpawn, как будто Unity создала GameObject впервые. По умолчанию GameObject создается так же, как и любой другой созданный GameObject.
Видимость сети на хосте
Хост использует ту же Сцену, что и сервер, потому что он действует и как сервер, и как клиент для игрока, размещающего игру. По этой причине он не может уничтожить игровые объекты, которые не видны локальному игроку.
Вместо этого есть виртуальный методOnSetLocalVisibility** **на NetworkBehaviour, который вызывается. Этот метод вызывается для всех NetworkBehaviour
скриптовфрагмент кода, который позволяет создавать свои собственные Компоненты, запускать игровые события, изменять свойства Компонентов с течением времени и реагировать на действия пользователя любым удобным для вас способом. Подробнее
См. Словарь об игровых объектах, которые изменяют состояние видимости на хосте.
Реализация по умолчанию OnSetLocalVisibility
отключает или включает все компоненты Renderer в GameObject. Если вы хотите настроить эту реализацию, вы можете переопределить метод в своем скрипте и предоставить новое поведение того, как хост (и, следовательно, локальный клиент) должен реагировать, когда GameObject становится видимым или невидимым в сети (например, отключение элементов HUD). или визуализаторы).