NetworkReader десериализует строку в бессмыслицу - PullRequest
0 голосов
/ 24 января 2019

Я работаю над написанием пользовательского класса сетевых сообщений, который наследует от MessageBase , переопределяя его функции ' Serialize и Deserialize .

Я хотел бы иметь возможность отправить IP-адрес игрока в этом сообщении. Для этого я устанавливаю свойство SpawnMessage.Address для client.connection.address из внешнего класса (оба являются строковыми типами).

Однако, когда я сериализую -> Отправить -> десериализовать это сообщение, я получаю бессмысленные строки из моего NetworkReader для ipaddress, когда я ожидаю "localServer" в этом конкретном примере.

Куда я иду не так? И есть ли потенциально лучший способ сделать это?

public class LineObjectMessage : MessageBase
{   
    public LineSpawn SpawnMessage = new LineSpawn();

    public override void Serialize(NetworkWriter writer)
    {
        writer.StartMessage(NetworkMessageTypes.LineObjectSpawnMessage);

        writer.Write(SpawnMessage.IpAddress);
        writer.Write(SpawnMessage.NetId);
        writer.Write(SpawnMessage.Thickness);

        writer.FinishMessage();
    }

    public override void Deserialize(NetworkReader reader)
    {
        SpawnMessage = new LineSpawn();

        SpawnMessage.IpAddress = reader.ReadString();
        SpawnMessage.NetId = reader.ReadNetworkId();
        SpawnMessage.Thickness = reader.ReadDouble(); 
    }

    [Serializable]
    public partial class LineSpawn
    {
        public string IpAddress;

        public double Thickness;

        public NetworkInstanceId NetId;
    }       
}

enter image description here

...