но решение не знаю на сколько хорошие получилось я далеко не гуру по Юнити
вышло вот что: создание сервера и подключение к нему и передача данных по сети основа Multiplayera
Маленькое дополнение если подключается клиент (не игрок который создал сервер ) то нужно перед подключением
создать свой сервер hostId = NetworkTransport.AddHost(topology, 0); с портом 0 а потом уже подключатся к стороннему серверу
я примерно догадываюсь для чего так сделали разрабы но это обязательно.
если что неверно записал поправте.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Text;
using UnityEngine.UI;
public class reg : MonoBehaviour {
int hostId;
byte error;
byte[] buffer = new byte[1024];
int bufferLength;
int connectionId;
int myReiliableChannelId;
void Start () {
GlobalConfig gConfig = new GlobalConfig();//Получаем Глобальный конфиг
gConfig.MaxPacketSize = 10024; //Размер сетевого пакета
NetworkTransport.Init(gConfig);//применяем все это хозяйство
}
void Update () {
int recHostId;
int cconnectionId;
int channelId;
byte[] recBuffer = new byte[1024];
int bufferSize = 1024;
int dataSize;
byte error;
NetworkEventType recData = NetworkTransport.Receive(out recHostId, out cconnectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);
//Функция приема сообщений из сети
switch (recData) //цикл событий
{
case NetworkEventType.Nothing: // событие за кадр
break;
case NetworkEventType.ConnectEvent: // событие подключения клиента
Debug.Log ("Подключен");
break;
case NetworkEventType.DataEvent: // событие когда приходят данные (например чата или трансформа игрока)
string rrr = Encoding.ASCII.GetString (recBuffer); // получаем массив байтов и кодируем в строку через кодировку ASCII
chat (rrr); // вызываем процедуру с передачей в нее раскодированных данных
break;
case NetworkEventType.DisconnectEvent: // событие отключение клиента
Debug.Log ("Отключен");
break;
}
}
public void StartServer()
{
ConnectionConfig config = new ConnectionConfig();//присваиваем конфиг
myReiliableChannelId = config.AddChannel(QosType.Reliable);// создаем канал для передачи данных через него
HostTopology topology = new HostTopology(config, 15);// устанавливаем лимит игроков
hostId = NetworkTransport.AddHost(topology, 2302); // Создаем сервер и назначаем порт
}
public void Connected()
{
connectionId = NetworkTransport.Connect(hostId, "127.0.0.1", 2302, 0, out error);// подключаемся к серверу локально
}
public void Disconnect()
{
NetworkTransport.Disconnect(hostId, connectionId, out error);// отключение от серва
}
public void SendCall()
{
string s = "423423"; // сообшение для передачи по сети
byte[] byteArray = Encoding.ASCII.GetBytes(s);// превращаем в масив байт
NetworkTransport.Send(hostId, connectionId, myReiliableChannelId, byteArray, 1024, out error);//передаем по сети, прием его описан выше
}
public void chat(string rtr)
{
Debug.Log (rtr);//Наша вызванная процедура с сообщением которое пришло по сети и по своему его обрабатываем
}
public void Test(string gravi)
{
Debug.Log (gravi); // не обращаем внимание это моё
}
}
using System.Collections;
using UnityEngine.Networking;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Text;
using UnityEngine.UI;
public class reg : MonoBehaviour {
int hostId;
byte error;
byte[] buffer = new byte[1024];
int bufferLength;
int connectionId;
int myReiliableChannelId;
void Start () {
GlobalConfig gConfig = new GlobalConfig();//Получаем Глобальный конфиг
gConfig.MaxPacketSize = 10024; //Размер сетевого пакета
NetworkTransport.Init(gConfig);//применяем все это хозяйство
}
void Update () {
int recHostId;
int cconnectionId;
int channelId;
byte[] recBuffer = new byte[1024];
int bufferSize = 1024;
int dataSize;
byte error;
NetworkEventType recData = NetworkTransport.Receive(out recHostId, out cconnectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);
//Функция приема сообщений из сети
switch (recData) //цикл событий
{
case NetworkEventType.Nothing: // событие за кадр
break;
case NetworkEventType.ConnectEvent: // событие подключения клиента
Debug.Log ("Подключен");
break;
case NetworkEventType.DataEvent: // событие когда приходят данные (например чата или трансформа игрока)
string rrr = Encoding.ASCII.GetString (recBuffer); // получаем массив байтов и кодируем в строку через кодировку ASCII
chat (rrr); // вызываем процедуру с передачей в нее раскодированных данных
break;
case NetworkEventType.DisconnectEvent: // событие отключение клиента
Debug.Log ("Отключен");
break;
}
}
public void StartServer()
{
ConnectionConfig config = new ConnectionConfig();//присваиваем конфиг
myReiliableChannelId = config.AddChannel(QosType.Reliable);// создаем канал для передачи данных через него
HostTopology topology = new HostTopology(config, 15);// устанавливаем лимит игроков
hostId = NetworkTransport.AddHost(topology, 2302); // Создаем сервер и назначаем порт
}
public void Connected()
{
connectionId = NetworkTransport.Connect(hostId, "127.0.0.1", 2302, 0, out error);// подключаемся к серверу локально
}
public void Disconnect()
{
NetworkTransport.Disconnect(hostId, connectionId, out error);// отключение от серва
}
public void SendCall()
{
string s = "423423"; // сообшение для передачи по сети
byte[] byteArray = Encoding.ASCII.GetBytes(s);// превращаем в масив байт
NetworkTransport.Send(hostId, connectionId, myReiliableChannelId, byteArray, 1024, out error);//передаем по сети, прием его описан выше
}
public void chat(string rtr)
{
Debug.Log (rtr);//Наша вызванная процедура с сообщением которое пришло по сети и по своему его обрабатываем
}
public void Test(string gravi)
{
Debug.Log (gravi); // не обращаем внимание это моё
}
}