Если сервер ограничивает объём отправки для каждого соединения и отправляет сначала ближние объекты, соединение с низким лимитом получает дальних NPC поздно или не получает вовсе.
Почему В людных местах сервер отправляет данные в порядке важности в пределах лимита отправки для каждого соединения → Следствие Для соединения с заниженной оценкой пропускной способности (например, у фонового окна, которое поздно подтверждает приём) объекты из конца очереди постоянно откладываются → На экране Дальние NPC появляются поздно или не появляются только в одном клиенте
Один из клиентов на одном ПК, Одна локация или канал
Когда
При наплыве игроков
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента
Команда разработки: задачи
Сервер: повышать приоритет отложенных объектов со временем (защита от starvation), гарантировать минимальную частоту обновления. Клиент: вовремя отправлять подтверждения приёма и в фоне, чтобы оценка пропускной способности не занижалась.
На графике
Растёт вслед за онлайном и нагрузкой · число отложенных объектов по соединениям, объём отправки по соединениям
Где смотреть
Писать на сервере для каждого соединения число отправленных байтов за тик, лимит отправки (оценку пропускной способности), число отложенных и неотправленных объектов и время с последней отправки каждого объекта. В Unreal в Networking Insights видны размеры пакетов по соединениям и реплицируемые объекты внутри них
Подтверждает
Невидимый NPC долго откладывался в этом соединении, лимит этого соединения ниже, чем у других, и чем больше людей вокруг, тем больше отложенных объектов
Опровергает
Если отложенных объектов нет и этот NPC отправлен вовремя, проблема на этапах после отправки (буфер приёма, загрузка, настройки отображения). Если все соединения упираются в лимит, это проблема общего объёма отправки или архитектуры зоны видимости на сервере
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Источники
Actor Priority in Unreal EngineEpic Games Когда пропускная способность исчерпана, акторы для репликации выбираются по приоритету (расстояние, направление взгляда, время с последней репликации). Не все акторы реплицируются каждый раз
State SynchronizationGaffer On Games Накопление приоритета: объект, не попавший в текущий пакет, первым попадает в следующий, а лимит пропускной способности подстраивается в реальном времени
Networking Insights in Unreal EngineEpic Games Показывает размеры пакетов, отправленных и полученных по каждому соединению, и реплицируемые объекты и свойства внутри них