Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M2H_Networking_Tutorial_Translate.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
46 Кб
Скачать
☆

Tips OnSerializeNetworkView bug in 2.6 (and earlier)

I never wanted to use the OnSerializeNetworkView networking method (loved RPC so much), and when I finally did it appeared to have a big flaw. This flaw only occurs when you allocate viewid's yourself. An extract of my bug ticket:

«When using OnSerializeNetworkView with an observing networkview (reliable delta compressed in this case), it all works fine with 1 player (as host). As soon as a second client joins, it will complain about not knowing about the first assigned networkviewID of the first player.»

«Received state update for view ID ******random info here about your specific number*** but no initial state has ever been sent. Ignoring message.»

The problem is that these networkviews are bugged: the new client never get the «initial state» of the networkviews that have been assigned BEFORE that new client connected. This affects all clients.”

Also see: http://forum.unity3d.com/viewtopic.php?p=77193

Group limit

Вы можете использовать только 32 группы, даже если в коде вы назначите для networkview группу 48. В такой ситуации будет использоваться группа 48 (48 - 32).

RPC bug?

Не позволяйте этой ошибке убивать ваше время: если у вас есть игра, где авторитарный сервер является и игроком, попробуйте использовать такой код:

networkView.RPC("SendUserInput", RPCMode.Server, horizontalInput, verticalInput);

Если же и это не работает, то опробуйте так:

if(Network.isServer){ SendUserInput(horizontalInput, verticalInput); } else{ networkView.RPC("SendUserInput", RPCMode.Server, horizontalInput, verticalInput); }

Run dedicated servers

Недостаток реализации сети в Unity — выделенный (dedicated) сервер не столь выделенный, как хотелось бы. Однако, он вполне себе работает. Запуск выделенного сервера на Mac OS X возможен, если задать параметр пакетного режима при выполнении. В 2.6 была добавлена аналогичная функция и для Windows.

Подробнее по ссылке: http://unity3d.com/support/documentation/Manual/Command%20Line%20Arguments.html

Когда запущен выделенный сервер, нужно использовать Application.targetFrameRate для того, чтобы удостовериться, что Unity не пытаается запустить ваш сервер с 1000+ fps, сжирая ваши ресурсы.

Connection issues: How to connect over the internet

Отличие интернет-подключения от подключения внутри LAN-сети в том, что скорость обычно несколько ниже.

Если же игра через интернет не работает, то проверьте следующее:

  • Работает ли игра через LAN?

  • Оба компьютера имеют работающее интернет-соединение?

  • Открыт ли на обоих компьютерах в их файрволлах используемый порт? Можно на время даже отключить файрволлы.

  • Попробуйте прямое подключение. Запустите сервер и с другого компьютера произведите подключение по внешнему IP-адресу сервера.

  • Если это всё не помогло, то ваш сетевой роутер вероятно пытается блокировать неизвестное входящее подключение как небезопасное. Есть два варианта:

    • использовать NAT для проброса (смотрите пример с мастерсервером). Проверьте, поддерживает ли ваш роутер NAT-пробросы.

    • откройте порт для использования в вашем роутере и/или сделайте форвардинг всех соединени по этому порту на ваш внутренний (LAN) IP-адрес.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]