Как стать автором
Обновить

Программирование сетей. UnityNetwork

Начнем с простого. Куда мы подключаемся? Правильно, к серверу, а что должен делать сервер? Правильно, контролировать процесс. Чтобы подключиться к серверу нам надо: IP и порт. Для примера возьмем 127.0.0.1 и порт 25001.

public string connectToIP = "127.0.0.1";
public int connectPort = 25001;


Так, объявить-то мы объявили переменные IP и порта, но что нам делать дальше? Для визуальных действий, нам нужна великая и могучая функция OnGUI:

public void OnGUI () {

}


Первоначально мы решили сделать проверку: подключен ли игрок? Но мы сделаем иначе, мы проверим: если подключение неактивно:

if (Network.peerType == NetworkPeerType.Disconnected){

Далее мы должны сказать нашему клиенту, что он не подключен:

GUILayout.Label("Connection status: Disconnected");

И вывести поле для ввода IP адреса:

connectToIP = GUILayout.TextField(connectToIP, GUILayout.MinWidth(100));

После этого, мы начнем объявление вертикальной группы GUI элементов:

GUILayout.BeginVertical();
// код тут
GUILayout.EndVertical();


В месте кода, мы создадим кнопки: «Подключиться как клиент» и «Создать сервер».

if (GUILayout.Button ("Connect as client")) {

}
if (GUILayout.Button ("Start Server")) {

}


При нажатии на кнопку подключения к серверу, мы должны проигнорировать NAT подключение, а также подключиться к указанному IP с указанным портом:

Network.useNat = false;
Network.Connect(connectToIP, connectPort);


А при создании сервера, мы должны создать его. Логично!

Network.useNat = false;
Network.InitializeServer(32, connectPort);


Теперь… Вы помните условие? Если не подключены, а в остальных случаях:

else {

}


Мы должны проверять: если мы сервер, и если мы клиент:

if (Network.peerType == NetworkPeerType.Connecting){

} else if (Network.peerType == NetworkPeerType.Client){

} else if (Network.peerType == NetworkPeerType.Server){

}


При подключении
if (Network.peerType == NetworkPeerType.Connecting)
Мы должны написать пользователю, что он подключается:

GUILayout.Label("Connection status: Connecting");

А при подключении как клиент, написать что он клиент и написать пинг сервера:

GUILayout.Label("Connection status: Client!");
GUILayout.Label("Ping to server: "+Network.GetAveragePing( Network.connections[0] ) );


Нежели с сервером. При статусе подключения как сервер, мы должны также написать, что мы сервер, потом вывести число подключений и пинг:

GUILayout.Label("Connection status: Server!");
GUILayout.Label("Connections: "+Network.connections.Length);
if(Network.connections.Length>=1){
GUILayout.Label("Ping to first player: "+Network.GetAveragePing( Network.connections[0] ) );
}


А при всех подключениях, мы должны отключаться. Создаем кнопку отключения:

if (GUILayout.Button ("Disconnect"))
{
Network.Disconnect(200);
}


Ну вот и все. Всем спасибо за внимание.
Целый скрипт:

using UnityEngine;
using System.Collections;

public class Connect : MonoBehaviour {

public string connectToIP = "127.0.0.1";
public int connectPort = 25001;

public void OnGUI ()
{

if (Network.peerType == NetworkPeerType.Disconnected){
GUILayout.Label("Connection status: Disconnected");

connectToIP = GUILayout.TextField(connectToIP, GUILayout.MinWidth(100));

GUILayout.BeginVertical();
if (GUILayout.Button ("Connect as client"))
{
Network.useNat = false;
Network.Connect(connectToIP, connectPort);
}

if (GUILayout.Button ("Start Server"))
{
Network.useNat = false;
Network.InitializeServer(32, connectPort);
}
GUILayout.EndVertical();


}else{


if (Network.peerType == NetworkPeerType.Connecting){

GUILayout.Label("Connection status: Connecting");

} else if (Network.peerType == NetworkPeerType.Client){

GUILayout.Label("Connection status: Client!");
GUILayout.Label("Ping to server: "+Network.GetAveragePing( Network.connections[0] ) );

} else if (Network.peerType == NetworkPeerType.Server){

GUILayout.Label("Connection status: Server!");
GUILayout.Label("Connections: "+Network.connections.Length);
if(Network.connections.Length>=1){
GUILayout.Label("Ping to first player: "+Network.GetAveragePing( Network.connections[0] ) );
}
}

if (GUILayout.Button ("Disconnect"))
{
Network.Disconnect(200);
}
}

}
}
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.