В проекте 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