Начнем с простого. Куда мы подключаемся? Правильно, к серверу, а что должен делать сервер? Правильно, контролировать процесс. Чтобы подключиться к серверу нам надо: IP и порт. Для примера возьмем 127.0.0.1 и порт 25001.
Так, объявить-то мы объявили переменные IP и порта, но что нам делать дальше? Для визуальных действий, нам нужна великая и могучая функция OnGUI:
Первоначально мы решили сделать проверку: подключен ли игрок? Но мы сделаем иначе, мы проверим: если подключение неактивно:
Далее мы должны сказать нашему клиенту, что он не подключен:
И вывести поле для ввода IP адреса:
После этого, мы начнем объявление вертикальной группы GUI элементов:
В месте кода, мы создадим кнопки: «Подключиться как клиент» и «Создать сервер».
При нажатии на кнопку подключения к серверу, мы должны проигнорировать NAT подключение, а также подключиться к указанному IP с указанным портом:
А при создании сервера, мы должны создать его. Логично!
Теперь… Вы помните условие? Если не подключены, а в остальных случаях:
Мы должны проверять: если мы сервер, и если мы клиент:
При подключении
А при подключении как клиент, написать что он клиент и написать пинг сервера:
Нежели с сервером. При статусе подключения как сервер, мы должны также написать, что мы сервер, потом вывести число подключений и пинг:
А при всех подключениях, мы должны отключаться. Создаем кнопку отключения:
Ну вот и все. Всем спасибо за внимание.
Целый скрипт:
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);
}
}
}
}