@nonameException

Связка консольного приложения C# и Unity выдает ошибку при десериализации. С чем это связано?

В проекте Unity у меня есть пару классов которые отвечают за игровые события(все они унаследованы от одного класса Event для облегчения). Например событие синхронизации позиции:
using System;

namespace ServerSystem.Events
{
    [Serializable]
    public class TransformSyncEvent : Event
    {
        public MyVector3 position;
        public MyVector3 rotation;
        public string GUID;
    }
}

Класс сериализуется и отправляется на сервер где он должен десериализоватся(Этот класс и в консольном приложении и в Unity один и тот же). Но при десериализации на сервере выдает исключение System.Runtime.Serialization.SerializationException:
Не удалось найти сборку "Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null".

Функции сериализации и десериализации:
static private byte[] ObjectToByteArray(Object obj)
{
    if (obj == null) return null;

    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream();
    bf.Serialize(ms, obj);

    return ms.ToArray();
}

static private Events.Event ByteArrayToObject(byte[] arrBytes)
{
    MemoryStream memStream = new MemoryStream();
    BinaryFormatter binForm = new BinaryFormatter();
    memStream.Write(arrBytes, 0, arrBytes.Length);
    memStream.Seek(0, SeekOrigin.Begin);
    Events.Event obj = (Events.Event)binForm.Deserialize(memStream);

    return obj;
}


Отправка данных:
Events.TransformSyncEvent Sync = new Events.TransformSyncEvent();
Sync.position = Vector3UnityToMyVector(player.transform.position);
Sync.rotation = Vector3UnityToMyVector(player.transform.eulerAngles);
Sync.GUID = System.Guid.NewGuid().ToString();
server.Send(ObjectToByteArray(Sync));


Прием данных:
Socket handler = listenSocket.Accept();
StringBuilder builder = new StringBuilder();

using (MemoryStream memStream = new MemoryStream())
{
    byte[] buffer = new byte[bufferSize];
    do
    {
        int received = handler.Receive(buffer);
        memStream.Write(buffer, 0, received);
    }
    while (handler.Available > 0);
    Events.Event e = ByteArrayToObject(memStream.ToArray());
}


Связано ли это с тем что игра на Unity а сервер на чистом C#? Если да то почему ведь в классах я не использую типы переменных\функции из пространства имен UnityEngine
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы