JasonXuDeveloper / Nino

Definite useful and high performance serialization library for any C# projects, including but not limited to .NET Core apps or Unity/Godot games.
https://nino.xgamedev.net
MIT License
468 stars 44 forks source link

使用Jengine 在热更工程里无法反序列化 #31

Closed fenglindubu closed 2 years ago

fenglindubu commented 2 years ago

MessagePacket:

public struct MessagePacket
{
    public byte MessageID;
    public ArraySegment<byte> MessageData;
    public MessagePacket(byte messageID, ArraySegment<byte> messageData)
    {
        MessageData = messageData;
        MessageID = messageID;

    }
    public MessagePacket(byte messageID, byte[] messageData)
    {
        MessageData = messageData;
        MessageID = messageID;

    }
    public static MessagePacket ReadFrom(ArraySegment<byte> data)
    {
        return new MessagePacket(data.Array[0], data.Slice(1));
    }
    public static MessagePacket ReadFrom(byte[] data)
    {
        return new MessagePacket(data[0], data.AsSpan().Slice(1).ToArray());
    }
    public byte[] ToBytes()
    {
        var buffer = new byte[MessageData.Count + 1];
        buffer[0] = MessageID;
        MessageData.CopyTo(buffer, 1);
        return buffer;
    }

}

Npc:

[NinoSerialize]
public partial class Npc
{

        [NinoMember(1)]
        public int InstanceID;
        [NinoMember(2)]
        public int NpcID;
        [NinoMember(3)]
        public Vector3 ServerPosition;
        [NinoMember(4)]
        public bool IsMove;
        [NinoMember(5)]
        public int Blood;

}

主工程测试:

    var npc = new Npc();
    npc.NpcID = 1;
    npc.ServerPosition = new Vector3(0f, 0f, 0f);
    var messagePacket = new MessagePacket(0x02, Nino.Serialization.Serializer.Serialize(npc));
    var temp = messagePacket.ToBytes();

    var rst = MessagePacket.ReadFrom(temp);
    var npc2 = Nino.Serialization.Deserializer.Deserialize<Npc>(rst.MessageData);
    Debug.Log(npc2.NpcID);
    Debug.Log(npc2.ServerPosition);

输出

TestNino
(0.00, 0.00, 0.00)

热更工程测试:

TestNino
Specified cast is not valid.