Version: 2017.4
Построение своих собственных сетевых серверов Юнити.
Legacy Asset Bundles

Минимизация сетевого трафика

(For new projects, you should use the new networking system introduced in 5.1. This information is for legacy projects using the old networking system.)

Поскольку сетевые взаимодействия могут быть относительно медленными по сравнению с другими аспектами игры, важно уменьшить их до минимума. Следовательно, очень важно решить, каким объемом данных обмениваться и как часто производить этот обмен.

Как синхронизируются данные

Величина используемого сетевого трафика в значительной мере зависит от того, используете ли вы Unreliable или Reliable Delta Compression режим для синхронизации данных (режим выставляется в компоненте Network View).

In Unreliable mode, the whole of the object being synchronized will be transmitted on each iteration of the network update loop. The frequency of this update is determined by the value of Network.sendRate, which is set to 15 updates per second by default. Unreliable mode ensures frequent updates but any dropped or delayed packets will simply be ignored. This is often the best synchronization mode to use when objects change state very frequently and the effect of a missed update is very short-lived. However, you should bear in mind the amount of data that might be sent during each update. For example, synchronizing a Transform involves transmitting nine float values (three Vector3s with three floats each), which equates to 36 Bytes per update. If the server is running with eight clients and using the default update frequency then it will receive 4,320 KBytes/s (8*36*15) or 34.6Kbits/s and transmit 30.2 KBytes/s (8*7*36*15) or 242Kbits/s. You can reduce the bandwidth consumption considerably by lowering the frequency of updates, but the default value of 15 is about right for a game where the action moves quickly.

В режиме Reliable Delta Compressed гарантируется, что данные будут надёжно отправлены и прибудут в правильном порядке. Если пакеты теряются, они отправляются заново, а если они приходят в неправильном порядке, то они будут помещаться в буфер до тех пор, пока не придут все пакеты последовательности. Хотя это гарантирует, что переданные данные будут получены корректно, ожидания и повторные отправления ведут к увеличению использования сетевого трафика. Однако, данные также дельта-компрессированы (сжаты по критерию изменения, delta compressed), что означает, что будут передаваться только отличия по сравнению с прошлым состоянием. Если состояние такое же, ничего не отправляется. Выгоды от дельта-компрессии, таким образом, зависят от того, как сильно изменяется состояние и в каких свойствах.

Какие данные синхронизируются

Существует множество возможностей проявить свои творческие способности при создании игры, так что состояние будет казаться одинаковым на всех клиентах, даже при том, что, строго говоря, может не быть таковым. Например, решение о том, где синхронизировать анимации. Если компонент Animation наблюдается в компоненте Network View, то его свойства будут синхронизироваться буквально одинаково на всех клиентах. Хотя в некоторых случаях это может быть оправдано, обычно персонажу достаточно выглядеть просто шагающим, бегающим, прыгающим и т.д. Так анимации могут грубо синхронизироваться, просто отправляя целочисленное значение, определяющее какую последовательность анимаций проигрывать. Это значительно сэкономит сетевой трафик по сравнению с синхронизацией всего компонента Animation целиком.

Когда синхронизировать данные

Часто нет необходимости поддерживать игру идеально синхронно на всех клиентах, например, в случаях, когда игроки временно в разных областях игры, где они в принципе не могут пересечься друг с другом. Это может уменьшить сетевой трафик, также как и нагрузку на сервер, раз только те, клиенты, что могут взаимодействовать, нуждаются в синхронизации. Иногда такая концепция приводит нас к Relevant Sets (т.е. существуют подмножества внутри всей игры, соответствующие какому-либо конкретному клиенту в какой-то конкретный момент). Синхронизация клиентов в соответствии с их множествами может осуществляться при помощи RPC, поскольку они могут обеспечивать значительный контроль над пунктами назначения обновления состояния state update.

Загрузка уровня

Когда загружаются уровни, редко приходится волноваться о сетевом трафике, поскольку каждый клиент может просто подождать, пока у всех остальных не инициализируется уровень для игры. Загрузка уровня может часто включать передачу довольно больших объёмов данных (таких как картинки или аудиоданные).

Построение своих собственных сетевых серверов Юнити.
Legacy Asset Bundles
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961