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);
MessagePacket:
Npc:
主工程测试:
输出
热更工程测试: