Это урок покажет суть использования встроенных возможностей Unity сетей. И так приступим. Unity поддерживает .NET 1.1 и 2.1 версии. Вы можете включить или выключить сеть в: Edit -> Project Settings -> Player -> Enable Unity Networking. Сеть Unity поддерживает wifi, 3G и GSM связь. Вы можете подключатся между различными сборками. Например вы можете создать сервер на компьютере и подключится к нему с iPhone, или запустить в Unity Web Player а подключится с Unity iPhone, и так далее.
Создание своего первого Клиент или Серверного приложения
В этой главе мы рассмотрим основы, необходимые для создания простого мультиплеерного приложения. Мы создадим первый пример в котором реализуем передвижение объектов по сети и установку связи между Клиентом и Сервером. Пример использует базовые сетевые компоненты, такие как: Network и NetworkView. Мы будем использовать прямое подключение для связи Клиента с Сервером.
Подготовка сцены
Теперь давайте начнем с создания простой сцены. Ваши первые шаги:
Создать новый проект.
Создать новый Prefab и изменить его имя на Player: Assets -> Create -> Prefab.
Создать приметив Куб: GameObject -> Create other -> Cube.
Перетащите Куб с Hierarchy вкладки в Player Prefab который находится в Project вкладке и затем удалите Куб со сцены.
Создайте новую Плоскость и переименуйте ее в Ground: GameObject -> Create other -> Plane. Параметры Плоскости должны быть такими: Position (0,0,0), Rotation (0,0,0), Scale (5,5,5) (Можно использовать други но для этого урока будут использованы эти параметры) . Создайте источник света Directional Light: GameObject -> Create other -> Directional Light.
И наконец, сохраните Сцену и дайте ей имя MainGame: File -> Save Scene.
Сервер и Клиент
Начинаем с наиболее важной задачи — создания Сервера и Клиента: Создайте новый JavaScript файл и переименуйте его в ConnectionGUI: Assets -> Create -> JavaScript. Добавте файл путем перетаскивания к объекту Main Camera во вкладке Hierarchy, потом откройте этот файл и создайте несколько переменных:
var remoteIP = "127.0.0.1"; var remotePort = 25000; var listenPort = 25000; var useNAT = false; var yourIP = ""; var yourPort = "";
Теперь мы создадим интерфейс, используя GUI для создания Сервера и подключения к нему:
function OnGUI () { // Проверка подключены ли вы к Серверу или нет if (Network.peerType == NetworkPeerType.Disconnected) { // Если вы подключены if (GUI.Button (new Rect(10,10,100,30),"Connect")) { Network.useNat = useNAT; // Подключение к Серверу Network.Connect(remoteIP, remotePort); } if (GUI.Button (new Rect(10,50,100,30),"Start Server")) { Network.useNat = useNAT; // Создание Сервера Network.InitializeServer(32, listenPort); // Сказать нашим объектам, что уровень и сеть готова к работе for (var go : GameObject in FindObjectsOfType(GameObject)) { go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver); } } // Создаем поля ip адрес и port remoteIP = GUI.TextField(new Rect(120,10,100,20),remoteIP); remotePort = parseInt(GUI.TextField(new Rect(230,10,40,20),remotePort.ToString())); } else { // Получаем твой ip адрес и port ipaddress = Network.player.ipAddress; port = Network.player.port.ToString(); GUI.Label(new Rect(140,20,250,40),"IP Adress: "+ipaddress+":"+port); if (GUI.Button (new Rect(10,10,100,50),"Disconnect")) { // Отключение от Сервера Network.Disconnect(200); } } }
Обратите внимание на функцию ниже. Эта функция вызывается каждый раз, когда есть успешное соединение с Сервером. Когда это произойдет ,мы говорим всем объектам , что сцена и сеть готовы работать.
function OnConnectedToServer () { // Сказать всем объектам что сцена и сеть готовы for (var go : GameObject in FindObjectsOfType(GameObject)) go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver); }
Теперь вы можете проверить ваш Сервер и Клиент. Измените Player Settings (Edit -> Project Settings -> Player) чтобы настроить iPhone Bundle Identifier и перейти по умолчанию Ориентация экрана к правому углу. Скомпилируйте свой проект iPhone и создайте Сервер в редакторе. Попробуйте подключится к Серверу используя IP адрес его можно увидеть на экране Сервера — если все пойдет нормально то вы увидите кнопку “Disconnect” и ваш IP адрес на обоих экранах. Чтобы все работало ,приложения должны быть в одной и той же сети.
Сцена и Создание Объектов по сети
Теперь нам надо добавить сетевые компоненты вашему Player (Cube) и написать код на его экземпляр : Выберите Player Prefab и добавьте к нему NetworkView: Components -> Miscellaneous-> NetworkView. Когда компонент появится на объекте измените состояние State Synchronization в Reliable Delta Compressed. Это необходимо для того, чтобы показать перемещение всем игрокам. Добавьте Rigidbody к вашему Player Prefab: Select Prefab -> Component -> Physics -> Rigidbody.
Теперь мы будем создавать вашего Player и объектов по сети: Создайте пустой GameObject и переименуйте в Spawn. Параметры Объекта: Position (0,5,0), Rotation (0,0,0), Scale (1,1,1). Создайте новый JavaScript и измените имя на Instantiate. Откройте этот JavaScript и впишите туда этот код:
function OnNetworkLoadedLevel () { // Создание SpaceCraft(Корабля) когда сеть создана Network.Instantiate(SpaceCraft, transform.position, transform.rotation, 0); } function OnPlayerDisconnected (player : NetworkPlayer) { Network.RemoveRPCs(player, 0); Network.DestroyPlayerObjects(player); }
Добавьте JavaScript на объект Spawn: Select Spawn Object -> Component -> Scripts -> Instantiate. Выберите объект Spawn и измените параметр Player на “Player (Trans- form)” выбрав объект из списка. Если вы проверяете пример то вы увидите ,что Сервер и каждый подключенный пользователь имеют свои собственные Player (Cube). Сейчас мы создадим простой тест: Создайте новый JavaScript и переименуйте его в Control.js. Добавьте этот код в файл:
function OnGUI() { if(GUI.Button(new Rect(20,100,50,50),"up")) { GameObject.Find("Player(Clone)").transform.position = new Vector3(0,5,0); } }
Добавьте этот файл объекту Spawn в Hierarchy вкладке. Скомпилируйте ваш проект, создайте сервер и подключитесь к нему. Теперь вы можете видеть, что каждый может перемещать свои Player (Cube).
Жду плюсиков;) И Удачи!)
Сообщение отредактировал Leerd - Воскресенье, 13 Марта 2011, 18:21
за то, что чуть переписал стандартный урок с wiki.unity3d.ru? Жизнь это игра - хреново задумана но графика обалденная..... Программирую на С++ Мой личный Мой новый блог (создан 22.08.2011)
SCOURGE, причем там еще есть скриншоты и разделение по главам Мои проекты: Cubez! - http://gcup.ru/forum/9-15867-1 Bungee Amster - http://gcup.ru/forum/9-17140-1