• Increase font size
  • Default font size
  • Decrease font size
  • default color
  • cyan color
  • red color
Основы сети в Unity
Автор: Administrator   
01.06.2011 22:01

Создание сервера

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

Создание сервера происходит вызовом функции Network.InitializeServer(). Для подсоединения к серверу как клиент необходимо вызвать функцию Network.Connect(). Мы рекомендуем Вам подробно ознакомиться с разделом Network Class в документации на сайте разработчиков Unity.

 

Передача информации с помощью Network Views

Network Views это компонент отвечающий за передачу данных по сети. При наличии этого компонента Game Object приобретает возможность пересылать данные, используя функции вызова (RPC) или синхронизацию.

Правильная настройка Network Views во многом предопределяет, как будет функционировать Ваша игровая сеть. Для дополнительной информации ознакомьтесь с разделами Network Views Guide и Component Reference на сайте разработчиков Unity.

 

Процедуры дистанционного вызова (RPC)

RPC это набор функций, которые необходимо добавить в игровой объект. Так же необходимо, чтобы это объект содержал в себе компонент Network View.
В настройках Network View необходимо указать скрипт, в котором используются функции RPC. Соответственно сами функции RPC могут быть вызваны из любого скрипта в пределах данного Game Object.
Network View должен указывать на скрипт, который содержит функцию RPC. Функция RPC может быть вызвана с любого скрипта в пределах Game Object. Для дополнительной информации ознакомьтесь с разделом RPC Details на сайте разработчиков Unity.

 

Синхронизация

Синхронизация - совместное использование данных каждого клиента между всеми клиентами внутри одной игровой сети. Благодаря синхронизации создаётся подобие того, что игра бежит локально, хотя на самом деле игра работает по сети.
Для синхронизации состояния объекта необходимо добавить к нему компонент Network View, в котором указывается за чем именно следить в объекте (например, положение в пространстве, размеры и любые другие свойства объекта). Этот поток данных синхронизирован между всеми клиентами внутри сети. Для дополнительной информации ознакомьтесь с разделом State Synchronization на сайте разработчиков Unity.

 

Network.Instantiate ()

Вызов функции Network.Instantiate() позволит Вам с лёгкостью создавать Instance, копию предварительно заготовленного объекта, на всех клиентах внутри игровой сети. На самом деле при вызове функции Network.Instantiate() происходит вызов функции Instantiate() разом на всех компьютерах. Каждой копии присваивается NetworkViewID, номер которого является общим для всех клиентов. С помощью этого номера контролируется синхронизация между всеми клиентами. Для дополнительной информации ознакомьтесь с разделом Network Instantiate на сайте разработчиков Unity.

 

NetworkLevelLoad ()

Когда мы имеем дело с массовой пересылкой данных о состояния клиентов, следует помнить, что, нагрузка на игровую сеть резко возрастает. В свою очередь это приводит к задержкам при загрузке последующих этапов. Раздел Network Level Load содержит полезные примеры решения данной проблемы.

 

Master Server

Master Server помогает установить связь между игроками. При создании сервера есть опция зарегистрировать его на Master Server для того, чтобы и другие игроки так же смогли найти его в списке активных серверов. При использовании Master Server отпадает надобность игрокам знать явный IP адрес и порт сервера и клиента, что существенно повышает уровень сетевой безопасности. Master Server содержит в себе компонент Facilitator, с его помощью можно преодолеть сетевые проблемы связанные с настройками брандмауэра (фаервола) и пройти NAT (NAT Punch Through). Так же необходимо указать, что, Facilitator может работать и сам по себе без Master Server. Для дополнительной информации ознакомьтесь с разделом Master Server на сайте разработчиков Unity.

 

Debugging сетевой игры

Для отслеживания ошибок в работе сети (debugging) в Unity предусмотрены различные инструменты. Одни из них - Network Manager, он создаёт полный лог сетевого трафика. Используя иерархию в окне Inspector, также можно отследить процесс создание объектов и отслеживать их NetworkViewID.

Также есть возможность запустить на одной машине одновременно два приложения Unity, при этом у каждого приложения должен быть свой отдельный проект. Под Windows это можно сделать, запустив вторую копию приложения через Project Wizard.

На компьютерах Макинтош оба приложения могут быть открыты из командной строки с указанием пути к проекту:

/Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath "/Users/MyUser/MyProjectFolder/"
/Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath "/Users/MyUser/MyOtherProjectFolder/"

Перед запуском второй копии Unity убедитесь, что опция player run in the background включена, в противном случае, как только окно Unity Editor перестанет быть активным, запущенная игра сразу перейдёт в режим ожидания, что приведёт к сетевому сбою в игре. Для включения этой опции найдите в меню Edit->Project Settings->Player или добавьте в код игры функцию Application.runInBackground.

Один из вариантов - установить под Windows виртуальную машину на базе VMware Workstation 6.5, так как это приложение полностью поддерживает Direct X 9c, в отличии от своего конкурента SUN Virtual BOX. К сожалению, на нём ещё не реализована корректная работа Unity (поддержка 3D).

Другими словами, виртуализация позволяет запустить два приложения Unity Editor с тем же самым проектом на одном компьютере. Желательно предварительно сделать копию проекта в другой директории. Так же благодаря виртуализации, мы можем запустить два проекта с различными сетевыми настройками на одном компьютере.

 

Вход на сайт

Онлайн

Сейчас 46 гостей онлайн

Понравился сайт?


Счетчики

Rambler's Top100

Облако тэгов

Joomla Extensions



Карта сайта