- •Tutorial 1. Connect & Disconnect
- •Tutorial 2: Sending messages Tutorial 2a: Server plays, client observes, no instantiating. Tutorial 2/Tutorial2a1
- •Tutorial 2/Tutorial 2a2
- •Tutorial 2/Tutorial 2a3
- •Tutorial 2b: Serever and client(s) play, with instantiating
- •Tutorial 3: Authoritative servers
- •Anti cheating
- •Using a proxy
- •Combat Lag: prediction, extrapolation and interpolation
- •Further network subjects explained Unity editor options related to networking
- •Limiting traffic: Scoping and group limiting
- •Securing the network connection
- •Manually allocate networkview id's
- •Network loading
- •Real life examples Example 1: Chatscript
- •Example 2: Masterserver example
- •Example 3: Lobby system
- •Example 4: fps game
- •Tips OnSerializeNetworkView bug in 2.6 (and earlier)
- •Group limit
- •Run dedicated servers
- •Connection issues: How to connect over the internet
- •Other networking options
Further network subjects explained Unity editor options related to networking
«Edit → Project settings → Network»
Sendrate: определяет, сколько раз в секунду будут посылаться сообщения об изменениях наблюдаемых (observed в networkview) объектах. Это не влияет на сообщения RPC. Уменьшение значения приводит к экономии трафика (и снижению точности работы приложения).
Debug level: определяет, как много сетевой отладочной информации покажет лог редактора.
«Edit → Project settings → Player»
Run in background: когда приложение запущено в роли сервера, оно требует включение этой опции для постоянной поддержки связи с клиентами.
Limiting traffic: Scoping and group limiting
Вы можете улчшить «сетевую производительность», ограничив количество пересылаемых данных. В сетевых играх игроки не должны получать каждый бит информации (всю информацию о происходящем на сервере). Он должен получать только то, что имеет для него значение. Есть две методики.
Первая. У компонента Network View есть функция SetScope:
function SetScope (player : NetworkPlayer, relevancy : bool) : bool
Это true для каждого игрока по умолчанию. Вы может установить false, если networkview далеко от игрока, и этот игрок больше не будет получать сообщения от данного networkview. Однако, это работает только для наблюдаемого (observed) значения, а RPC будут посылаться по-прежнему.
Второе. Сетевые функции:
static function SetReceivingEnabled (player : NetworkPlayer, group : int, enabled : bool) : void static function SetSendingEnabled (group : int, enabled : bool) : void
Эти две функции могут использоваться для ограничения отсылки/приёма, основанного на сетевых группах. Вы можете к примеру разделить вашу карту на 32 тайла (участка) и посылать/принимать информацию только тем пользователем (и от тех пользователей) которые находятся на расстоянии 8 тайлов от рассматриваемого игрока. Проблема в том, что групп может быть не более 32-х.
Securing the network connection
Добавление AES-шифрования, CRC, случайного шифрования SYNCookies и RSA-шифрования звуков — это сложно? К счастью, достаточно одной строки кода, чтобы внедрить это всё в игру.
function StartServer() { Network.InitializeSecurity(); // вся магия Network.InitializeServer(32, 25000); }
Вызывать InitializeSecurity() нужно перед инициализацией сервера. Этот режим безопасности добавит по 15 байтов на пакет в трафик.
Anti cheating
Даже с безопасностью от InitializeSecurity нужно предпринимать дополнительные меры предосторожности. Предположим, игрок знает, какой код вы используете, и он может редактировать сетевые пакеты под свои нужды. Таким образом, надо всегда проверять значения, которые мы получаем в этих пакетах. Тут не требуется много дополнительного кода — скорее, правильный дизайн.
Using a proxy
Отправляем вас в справку. Уж извините. http://unity3d.com/support/documentation/ScriptReference/Network-useProxy.html
Combat Lag: prediction, extrapolation and interpolation
Мы уже вкратце обсудили предсказание лагов в Tutorial 3. Когда есть авторитарный сервер, который принимает окончательные решения, стоит также использовать предварительный расчёт решения на клиенте.
Вот выдержка из мануала Unity:
«Экстраполяция состоит в том, что несколько последних (буферизированных) известных значений (например, позиций противника) используются для того, чтобы предсказать следующее значение. Интерполяция состоит в следующем. Иногда пакеты теряются. Предположим, пришёл пакет №1 с первой позицией противника, пакет №2 с "промежуточной" позицией потерялся, а пакет №3 с "новой" позицией пришёл. Происходит резкий скачок от первой позиции к третьей. Интерполяция как раз позволяет предположить перемещение противника между первым и третьим пакетами. В результате, перемещение сглаживается»
Примеры экстраполяции и интерполяции доступны в официальном примере «Network Example» и также присутствуют в главе «Example 4: FPS Game» этого урока.
