Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
Важно: UNet — это устаревшее решение, а также новая многопользовательская и сетьсистема Unity, которая обеспечивает многопользовательскую игру. игры через компьютерную сеть. Подробнее
См. в Словарь
Решение (Netcode для GameObjects) находится в разработке. Дополнительную информацию и дальнейшие действия см. на веб-сайте Unity Netcode for GameObjects.

Встроенный компонент Network Proximity Checker является встроенным компонентом по умолчанию для определения GameObjectФундаментальный объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
Смотреть в сети Словарь
. Однако это дает вам только проверку на основе расстояния. Иногда вам может понадобиться использовать другие виды проверки видимости, такие как правила на основе сетки, тесты прямой видимости, тесты пути навигации или любой другой тип теста, который подходит для вашей игры.

Для этого вы можете реализовать собственный аналог средства проверки близости к сети. Для этого вам нужно понять, как работает средство проверки сетевой близости. См. документацию по встроенному в редактор компоненту Network Proximity Checker и API NetworkProximityChecker.

Проверка сетевой близости реализована с использованием общедоступного интерфейса видимости многопользовательского интерфейса Unity HLAPI. Используя этот же интерфейс, вы можете реализовать любые правила видимости, которые пожелаете. Каждый NetworkIdentityсетевой компонент, который позволяет назначать идентификатор вашего игрового объекта, чтобы сеть распознала его как игровой объект локального игрока или игровой объект только для сервера. Подробнее
See in Словарь
отслеживает набор игроков, которым он виден. Игроки, которым виден GameObject NetworkIdentity, называются «наблюдателями» NetworkIdentity.

Средство проверки близости к сети вызывает метод RebuildObservers** ** для сетевого удостоверения. компонента с фиксированным интервалом (задается с помощью значения «Интервал обновления видимости» в инспекторе), чтобы набор видимых в сети игровых объектов для каждого игрока обновлялся по мере их перемещения.

В классе NetworkBehaviour** ** (от которого наследуют ваши сетевые сценарии) есть несколько виртуальных функций для определения видимости. Это:

  • OnCheckObserver — этот метод вызывается на сервере для каждого сетевого игрового объекта, когда в игру входит новый игрок. Если он возвращает true, этот игрок добавляется к наблюдателям объекта. Метод NetworkProximityChecker выполняет простую проверку расстояния в своей реализации этой функции и использует Physics.OverlapSphere() для поиска игроков. которые находятся в пределах видимости этого объекта.

  • OnRebuildObservers — этот метод вызывается на сервере при вызове RebuildObservers. Этот метод предполагает, что набор наблюдателей будет заполнен игроками, которые могут видеть объект. Затем NetworkServer обрабатывает отправку сообщений ObjectHide и ObjectSpawn на основе различий между старым и новым наборами видимости.

Вы можете проверить, является ли любой заданный сетевой объект GameObject игроком, проверив, имеет ли его NetworkIdentity действительный соединение с клиентом. Например:

var hits = Physics.OverlapSphere(transform.position, visRange); foreach (var hit in hits) { // (if a GameObject has a connectionToClient, it is a player) var uv = hit.GetComponent(); if (uv != null && uv.connectionToClient != null) { observers.Add(uv.connectionToClient); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3