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.

2. Приступаем к работе


Вы узнаете как:


Использовать базовые компоненты для работы с сетью.

Создание Сервера и Клиента.

Использовании  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).
Экран редактора должен выглядеть так-так на этом изображении:

3.3 Краткий Обзор


Поздравляем! Вы поняли все основы,
необходимые для создания мультиплеерных приложений.


Вы узнали как:
Создать простую сцену для использования ее в мультиплеерных играх.
Создание Сервера.
Создание Клиента.
Использовать прямое подключение.
Использование основных сетевых компонентов.
Создание объектов и сцены по сети.
И как
собрать это все до кучи.
Скачать NetworkExample проект.

В следующей главе, мы будем создавать сеть для игры Startrooper.

Продолжение следует….

Обратите внимание на функцию ниже. Эта функция вызывается каждый раз, когда есть успешное соединение

с Сервером. Когда это произойдет ,мы говорим всем объектам , что сцена и сеть готовы работать.

function OnConnectedToServer () {

// Сказать всем объектам что сцена и сеть готовы

for (var go : GameObject in FindObjectsOfType(GameObject))

go.SendMessage(“OnNetworkLoadedLevel”,

SendMessageOptions.DontRequireReceiver);

}

В режиме игры экран должен выглядеть таким образом:

VN:F [1.9.3_1094]
Rating: 8.7/10 (81 votes cast)
VN:F [1.9.3_1094]
Rating: +34 (from 40 votes)
Unity Multiplayer Tutorial - Startrooper, 8.7 out of 10 based on 81 ratings

9 комментариев на «Unity Multiplayer Tutorial – Startrooper»

  1. ruslan2012
    ruslan2012 пишет:

    когда сохраняю ConnectionGUI говорит что ” Unknow identifier “ipaddress” “

    VN:F [1.9.3_1094]
    Rating: 4.0/5 (4 votes cast)
    VN:F [1.9.3_1094]
    Rating: +2 (from 4 votes)
  2. Armageddon4ik
    Armageddon4ik пишет:

    var ipaddress = “”;
    var port = “”;
    Не хватает переменных!

    VN:F [1.9.3_1094]
    Rating: 3.7/5 (3 votes cast)
    VN:F [1.9.3_1094]
    Rating: 0 (from 2 votes)
  3. CoMMoN
    CoMMoN пишет:

    Кто поможет с установкой мультиплеера мне на игру? связь скайп comm86 ася 968704

    VN:F [1.9.3_1094]
    Rating: 1.0/5 (3 votes cast)
    VN:F [1.9.3_1094]
    Rating: -1 (from 1 vote)
  4. Armando

    lewisohn@dora.progandist” rel=”nofollow”>.…

    спс….

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: +1 (from 3 votes)
  5. jesse

    bernardine@headlands.illustrator” rel=”nofollow”>.…

    благодарен!!…

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  6. Gordon

    bethought@rhythmic.taxing” rel=”nofollow”>.…

    благодарю….

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  7. Darren

    dances@tracts.abstractionists” rel=”nofollow”>.…

    сэнкс за инфу!!…

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  8. Glen

    emanuel@villagers.sop” rel=”nofollow”>.…

    спасибо за инфу….

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)
  9. kirk

    subsection@osaka.taking” rel=”nofollow”>.…

    спс за инфу!!…

    VA:F [1.9.3_1094]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.3_1094]
    Rating: 0 (from 0 votes)

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.



Страница 1 of 0