У меня есть авторитетная система, где, когда игрок присоединяется к матчу, он получает все уже порожденные объекты - порожденные собой (клиент).
Это выглядит так:
Client
отправляет токен доступаServer
Client
получает согласие отServer
Client
переключает сцену на игровую сценуServer
отправляет игроков, ящики, объекты, с которыми вы можете взаимодействовать, чтобы ониclient
могли появляться и отображать их.
Но как насчет наземного объекта? На данный момент у меня точно такая же сцена на сервере и клиенте - одна статическая плоскость действует как пол. В настоящее время я добавляю новые вещи, деревья, лестницы и собираю вещи вместе.
Я думал - у нас все хорошо. Но разве среда не должна быть синхронизирована? Как-нибудь быть в сети? Принадлежит серверу?
Давайте возьмем League of Legends
:
Это статичная среда, вероятно, одна комбинированная сетка (лестница, трава, стены, магазин). Но действительно ли он хранится на клиенте или он отправляется сервером во время экрана загрузки?
unity
networking
maps
Иаков
источник
источник
Ответы:
По большей части, нет, художественные активы любого вида обычно не передаются по сети. Как правило, все клиенты будут иметь одинаковые ресурсы контента локально. Там может быть код, чтобы убедиться, что это так с помощью контрольной суммы содержимого или тому подобное. Если вы беспокоитесь о том, что пользователи могут повлиять на часть своего контента на стороне клиента, вы можете внедрить аналогичную систему.
Сервер может отправлять клиенту директивы, указывающие, что он должен отображать или скрывать определенные активы, но он не будет отправлять фактические данные актива. На практике это слишком расточительно и медленно, и может вызвать реальные проблемы у людей с ограниченными доступными данными.
В определенных случаях мелкие активы могут передаваться целиком, если актив как-то считается «спойлером» или чем-то еще. Но это необычно. Обычно вы видите, что игра может загружать новый контент из патча или чего-то еще, но это произойдет только один раз, во время процесса патча при запуске. Не во время игры.
источник
Зависит от нескольких факторов, в том числе от типа игры (я предполагаю RTS здесь, хотя MMO с открытым миром также приходит на ум). Базовое местное местное состояние игрока передается по соединению или является частью активов клиента - например, игра RTS, в которой карта либо поставляется вместе с клиентом, либо загружается до начала игры.
Действительно, меш обычно не отправляется, как это было бы на клиенте в большинстве случаев RTS. Независимо от того, есть ли карта столкновений, что действительно важно для синхронизации этих двух отправлена , - это другой вопрос. Но в большинстве RTS это снова будет предварительно сохранено на клиенте.
Так что на самом деле все зависит от того, с чем поставляется ваша RTS, загружаете ли вы карты до начала игры или во время начала игры.
После этого есть несколько типичных способов синхронизации:
источник
Что касается вашего точного вопроса, который я задал, я не знаю, как конкретно Лига Легенд решит его. Я никогда не играл в эту игру, поэтому я не могу предположить, нужно ли это.
Но ответ на ваш вопрос, в целом, довольно прост и понятен:
Если данные статичны , и вы точно знаете , что они будут никогда не изменятся ( не периодических полных обновлений игры, но это отдельно), то зачем вам когда-нибудь отправлять эти дополнительные данные? Обычно вы пытаетесь избежать отправки того, чего можно избежать. Отправляйте данные только в том случае, если это сообщение необходимо .
С другой стороны, если данные со временем изменятся или вы просто захотите оставить эту опцию открытой, то действительно ли у вас есть выбор? Для этого случая вы должны отправить данные. В противном случае клиент не имеет того, что ему нужно.
Это относится ко всем сетевым коммуникациям, а не только к данным о местности. Все .
источник
Нет.
Я сделал все возможное, чтобы покопаться в источнике League of Legends и обо всем, включая модели Чемпионов, Лавочника, общий фон карты и пуховых существ, добавленных после свершившегося факта (как маленькая белка на некоторых камнях и улитка в реки) хранятся на стороне клиента. Тот факт, что клиент имеет все эти модели, является одной из причин, по которой LoL имеет размер в несколько гигабайт.
Передача всех этих данных с сервера на клиент была бы адской, не говоря уже о том, чтобы пережевать из-за использования пропускной способности, просто чтобы сделать все это снова в следующей игре.
Так как же это решить тогда? Каждый игрок просто отправляет только те данные, которые имеют значение для других на сервер игроков в игре. Никто не должен знать, осталось ли у вас 5 секунд на восстановление Q, или что Deep Terror Thresh Skin создает для вас пузыри. Вещи, которые проходят в игре, такие как: В'Коз бросил Q, Виктор переместился влево и т. Д.
Если говорить более конкретно, то, что касается экрана загрузки, когда вы об этом говорили, то есть такие вещи, как патчи в середине патча, о которых каждый игрок должен поговорить с серверами riot до запуска игры, квитанции о безопасном соединении и протоколы анти-мошенничества.
НОТА:
Если вы хотите посмотреть, что у клиента есть, и, следовательно, сервер не пропустит вас, найдите папку C: \ Riot Games \ RADS \ lol_Game_Client \ Projects (это может быть немного не так, извините меня, я '' я сейчас работаю с памятью) и найду распаковщик .RAF-файлов онлайн. Затем вы можете увидеть все вещи, которые размещены локально, такие как загрузка экрана и текстуры кожи, даже скелеты чемпионов.
источник
Примером того, где это не было сделано, был Elder Scrolls Online, где он доверял клиенту высоту над уровнем земли .
Золотодобытчики упали с уровня земли на несколько футов. Затем они могли бы ходить "под" местностью и добывать ресурсы снизу, не будучи замеченными ПК или атакованными NPC.
Подобные изменения позволили им сгладить скалы, чтобы они могли подниматься по ним, удалять или прокладывать под статичными стенами, видеть сквозь все статические объекты и т. Д.
По сути, сервер доверял клиенту информацию о местонахождении игрока, поэтому подсчет столкновений на стороне сервера для каждого игрока против всех статических показателей был бы довольно тяжелым.
Однако в играх на основе тайлов, таких как Furcadia, все по-другому: каждая клетка, в которую вы входите, обладает степенью защиты на стороне сервера, и серверу не нужно никому доверять клиенту: сервер знает и проверяет каждое движение и действие пользователя, и клиент отображает действие только тогда, когда сервер сообщает ему результат.
источник