2015-11-02 2 views
1

Я пытаюсь передать текстуру 2D в единстве, используя сокет. Я столкнулся с проблемой сериализации.Передача текстуры2D через гнездо в единстве

Вот метод тат я использую для сериализации Texture2D:

Texture2D tex = new Texture2D(5, 5); 
    bool loaded = tex.LoadImage(File.ReadAllBytes(Environment.CurrentDirectory + "/Assets/Textures/IMG_3122.jpg")); 
    tex.Apply(); 

    byte[] bytes = tex.EncodeToPNG(); 
    NetworkWriter writer = new NetworkWriter(); 
    writer.WriteBytesFull(bytes); 
    byte[] data = writer.AsArray(); 


    byte error; 
    byte[] buffer = new byte[1024]; 
    int bufferSize = 1024; 

    Stream stream = new MemoryStream(); 
    stream.Write(data, 0, 1024); 
    BinaryFormatter formatter = new BinaryFormatter(); 
    formatter.Serialize(stream, data); 

    Debug.Log("Send byte : " + connectionId); 

    NetworkTransport.Send(socketId, connectionId, myReliableChannelId, buffer, bufferSize, out error); 

И стороне приемника, вот код:

switch (recNetworkEvent) 
    { 
     case NetworkEventType.Nothing: 
      break; 
     case NetworkEventType.ConnectEvent: 
      Debug.Log("New Connection event received"); 
      break; 
     case NetworkEventType.DataEvent: 
      Stream stream = new MemoryStream(); 
      stream.Read(recBuffer, 0, bufferSize); 

      //deserialize 
      BinaryFormatter formatter = new BinaryFormatter(); 
      string receivedImgBase64 = formatter.Deserialize(stream) as string; 

      //convert received base64 string to bytearray for texture display 
      byte[] imgByteArray = Encoding.ASCII.GetBytes(receivedImgBase64); 
    } 

Так что, когда я пытаюсь читать recBuffer со стороны приемника, поток имеет значение NULL.

Ошибка:

SerializationException: serializationStream suports seeking, but its length is 0

Является ли это ошибка с процессом сериализации или что-то еще?

ответ

0

Stream.Read(Byte[], Int32, Int32)считывает байты из потока и помещает их в recBuffer. Но вы просто выделили поток, поэтому он пуст - читать нечего.

Вы, вероятно, хотели использовать this constructor:

Stream stream = new MemoryStream(recBuffer, 0, bufferSize);