Unity Multiplayer Tutorial
Работа с сетью в Unity3d.
Автор: Andrius Kuznecovas
Перевел: Avatarchik
Оглавление
1. Урок по создании многопользовательской игры
1. Введение 3
2. Преступаем к работе 3
3. Создание первого Клиент-Серверного приложения 4
3.1 Подготовка сцены 4
3.2 Создание скриптов и добавление компонентов 5
3.2.1 Сервер и Клиент 5
3.2.2 Сцена и создание объектов в сети 8
3.3 Краткий обзор 10
4. Создание многопользовательскй игры Startrooper 11
4.1 Изменение сцены 11
4.2 Интеграция 11
4.2.1 Интеграция Объектов и Сцены 11
4.2.2 Сервер и Клиент 21
4.3.3 Заключительный шаг 37
4.3 Краткий обзор
Создание многопользовательской игры
Привет, всем пользователям Unity.
В этом уроке ты узнаешь
об работе с сетью в Unity3d.
Я надеюсь ,что этот урок
будет вам полезен.
1. Введение
Целью данного урока является показать суть использования встроенных возможностей Unity сетей.
Я покажу как создать базовые и расширенные сетевые приложение с помощью Master Server/Client,
UDP Server/Client and Direct Connect. В этом уроке мы будем использовать Unity iPhone 1.6,
iPhone 3GS и демку StarTrooper с сайта Unity3d.com.
• Вы узнаете как:
Использовать базовые компоненты для работы с сетью.
Создание Сервера и Клиента.
Использовании Master Server.
Использовании Direct Connect.
Использовании UDP Broadcast Server.
Создание простой сцены для работы в сети.
Преобразование StarTrooper в многопользовательскую игру.
Использование других компонентов и многое другое.
• Вы должны иметь и знать:
Unity iPhone 1.6.
iPhone или iPod.
Знать о сетях как они работают.
Расширенные знания C# and JavaScript.
Основные навыки в среде Unity. Более подробную информацию можете узнать
здесь.
• Важные примечания:
Unity поддерживает .NET 1.1 и 2.1 версии.
Вы можете включить или выключить сеть в: Edit -> Project Settings -> Player
-> Enable Unity Networking.
Сеть Unity поддерживает wifi, 3G и GSM связь.
Вы можете подключатся между различными сборками. Например вы
можете создать сервер на компьютере и подключится к нему с iPhone, или запустить в Unity Web
Player а подключится с Unity iPhone, и так далее.
3. Создание твоего первого Клиент / Серверного приложения
В этой главе мы рассмотрим основы, необходимые для создания простого мультиплеерного приложения.
Мы создадим первый пример в котором реализуем передвижение объектов по сети
и установку связи между Клиентом и Сервером. Пример использует базовые сетевые компоненты,
такие как: Network и NetworkView. Мы будем использовать прямое подключение для связи
Клиента с Сервером.
3.1 Подготовка сцены
• А теперь давайте начнем с создания простой сцены. Ваши первые шаги:
Создать новый проект.
Создать новый 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.
Параметры должны быть такими: Position (0,15,0), Rotation (25,0,0), Scale (1,1,1) Shadows
-> Type -> Soft Shadows.
И наконец, сохраните Сцену и дайте ей имя MainGame: File -> Save Scene.
Ваш проект должен выглядит так-так на этой картинке:
3.2 Создание Скриптов и добавление Компонентов
• Далее вы узнаете как создать Сервер и Клиент, создание Сцены и
объектов в сети, движение объектов, и как это все собрать до кучи.
3.2.1 Сервер & Клиент
• Мы начинаем с наиболее важной задачи — создания Сервера и Клиента:
Создайте новый JavaScript файл и переименуйте его в ConnectionGUI: Assets -> Create ->
JavaScript.
Добавить файл (путем перетаскивания) к объекту Main Camera во вкладке Hierarchy, потом
откройте этот файл и создайте несколько переменных:
1 2 3 4 5 6 | var remoteIP = "127.0.0.1"; var remotePort = 25000; var listenPort = 25000; var useNAT = false; var yourIP = ""; var yourPort = ""; |
Теперь мы создадим интерфейс, используя GUI для создания Сервера и подключения к нему:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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); } } } |
• Обратите внимание на функцию ниже. Эта функция вызывается каждый раз, когда есть успешное соединение
с Сервером. Когда это произойдет ,мы говорим всем объектам , что сцена и сеть готовы работать.
1 2 3 4 5 6 | 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 адрес на обоих экранах. Чтобы все работало ,приложения должны быть в одной и той же сети.
3.2.2 Сцена & Создание Объектов по сети
• Теперь нам надо добавить сетевые компоненты вашему 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.
Откройте этот файл и впишите туда этот код:
1 2 3 4 5 6 7 8 | function OnNetworkLoadedLevel () { // Создание SpaceCraft(Корабля) когда сеть создана Network.Instantiate(SpaceCraft, transform.position, transform.rotation, 0); } function OnPlayerDisconnected (player : NetworkPlayer) { Network.RemoveRPCs(player, 0); Network.DestroyPlayerObjects(player); } |
Добавьте файл на объект Spawn: Select Spawn Object -> Component ->
Scripts -> Instantiate.
Выберите объект Spawn и измените параметр Player на “Player (Trans-
form)” выбрав объект из списка.
• Если вы проверяете пример то вы увидите ,что Сервер и каждый подключенный пользователь
имеют свои собственные Player (Cube).Мы сейчас создадим простой тест:
Создайте новый JavaScript файл и переименуйте его в Control.js.
Добавьте этот код в файл:
1 2 3 4 5 6 | 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).
Экран редактора должен выглядеть так-так на этом изображении:
Поздравляем! Вы поняли все основы,
необходимые для создания мультиплеерных приложений.
• Вы узнали как:
Создать простую сцену для использования ее в мультиплеерных играх.
Создание Сервера.
Создание Клиента.
Использовать прямое подключение.
Использование основных сетевых компонентов.
Создание объектов и сцены по сети.
И как собрать это все до кучи.
Скачать NetworkExample проект.
В следующей главе, мы будем создавать сеть для игры Startrooper.
Продолжение следует….
9 комментариев на «Unity Multiplayer Tutorial – Startrooper»
Ваш отзыв
Вы должны войти, чтобы оставлять комментарии.
27 июля 2012 в 23:03
когда сохраняю ConnectionGUI говорит что ” Unknow identifier “ipaddress” “
07 Сен 2012 в 8:34
var ipaddress = “”;
var port = “”;
Не хватает переменных!
07 Сен 2012 в 9:13
Кто поможет с установкой мультиплеера мне на игру? связь скайп comm86 ася 968704
23 Дек 2013 в 16:06
lewisohn@dora.progandist” rel=”nofollow”>.…
спс….
23 Авг 2014 в 11:26
bernardine@headlands.illustrator” rel=”nofollow”>.…
благодарен!!…
23 Авг 2014 в 14:28
bethought@rhythmic.taxing” rel=”nofollow”>.…
благодарю….
23 Авг 2014 в 22:00
dances@tracts.abstractionists” rel=”nofollow”>.…
сэнкс за инфу!!…
26 Авг 2014 в 13:28
emanuel@villagers.sop” rel=”nofollow”>.…
спасибо за инфу….
26 Авг 2014 в 15:06
subsection@osaka.taking” rel=”nofollow”>.…
спс за инфу!!…