Multiplayer and Networking, NetworkTransport

Научился сам? Помоги начинающему.

Multiplayer and Networking, NetworkTransport

Сообщение LW1 20 дек 2015, 02:12

Было несколько тем по новому Multiplayer and Networking но что-то не кто не смог помочь, покапавшись в новом функционале разобрался,
но решение не знаю на сколько хорошие получилось я далеко не гуру по Юнити
вышло вот что: создание сервера и подключение к нему и передача данных по сети основа 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); // не обращаем внимание это моё
        }

}
Аватара пользователя
LW1
UNец
 
Сообщения: 7
Зарегистрирован: 12 дек 2015, 23:27

Вернуться в Уроки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3