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

Manually allocate networkview id's

Иногда Network.Instantiate не работает как надо на авторитарном сервере. Чтобы получить больший контроль над этим процессом, можно распределять ID для networkview самостоятельно. Пример кода: http://unity3d.com/support/documentation/ScriptReference/Network.AllocateViewID.html

Network loading

Для сети не имеет значения, что запущено на каждом серверном/клиентском компьютере в процессе сетевого взаимодействия. Может быть сервер, на котором запущена игровая сцена, пока новый клиент ещё только подключяется через сцену-лобби. Обычно тут нет никакой проблемы за исключением случаев, когда сервер пытается послать клиенту все буферизированные инстансы геймобъектов. По этой причине может быть лучше временно прекратить сетевое взаимодействие с клиентом, пока клиент загружает игру. Это можно реализовать через Network.isMessageQueueRunning = false; на стороне клиента после того как соединение с сервером было установлено. Пример есть в этом уроке в главе про лобби.

Теперь вы знаете, что сервер может хостить много игровых сессий и уровней посредством умного использования сетевых групп. Только внимательно следите, чтобы игроки из различных сессий не столкнулись между собой.

Real life examples Example 1: Chatscript

Сцена «Example1/Example1_Chat» содержит скрипт подключения из Tutorial 1 в сочетании с новым скриптом чата. Добавление чата в ваше игру весьма просто и вы можете использовать этот скрипт чата в ваших проектах. В настоящее время чат имеет ограничение на четыре строки, но можно это и изменить. Сервер отслеживает список игроков. В реальной игре вы, вероятно, будете хранить такой список в некоем центральном скрипте.

Example 2: Masterserver example

Сцена «Example2/Example2 menu». В этом примере показано, как можно использовать мастерсервер, чтобы показать все текущие игровые сессии.

Пункт «Qick Play» подсоединяет игрока к случайному доступному сеансу. Пункт "»Advanced» позволяет запустить хост, ввести IP и порт для прямого подключения или использовать сортированный список мастерсерверов для самостоятельного выбора. Недостаёт одной возможности — хостинга (и коннекта), защищённого паролем. Это легко добавляется для прямого соединения и хостинга.

For the game list you'll need to add a password popup window though.The 'game' in this example only shows you the connection status of the server and clients. You could easily replace the game scene with any other scene and the networking will work right away. You'll only need to set “Network.isMessageQueueRunning = true;” since we disabled it in the menu scene to prevent strange things from occurring in the main scene when a client joins a game that's in progress. You'll also need to remember to register the game to the masterserver once the server has started the game scene.

Example 3: Lobby system

Сцена «Example3/Example3_lobby». Этот пример очень похож на Example1, однако тут есть возможность предигрового лобби с паролем. В списке мастерсервера показываются только те игры, которые находятся на этапе лобби. Игры, которые начаты, удаляются из списка.

Example 4: fps game

В последнем примере мы рассмотрим создание сетевого шутера (FPS). Схема здесь не авторитарная, авторитарную разрабатывайте сами в качестве домашнего задания.

Здесь используется код мастерсервера для установки подключения в главном меню. В игре есть возможности для нескольких игроков: чат, таблица очков, движение, стрельба, подбор предметов. Если хотите, можете использовать это как основу для своей собственной игры. Только вам стоит добавить следующее:

  • Авторитарная обработка перемещения;

  • Анимация персонажей: надо синхронизировать анимации или считать анимацию на стороне клиента;

  • Переключение оружия;

  • Прицел, режим наблюдателя, игровые раунды и их лимит.

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