应该从此类派生网络消息类。然后,可以使用 NetworkConnection、NetworkClient 和 NetworkServer 的各种 Send 函数发送这些消息类。
派生自 MessageBase 的类的公共数据字段将自动通过该类实现序列化。开发者可以实现 Serialize 和 Deserialize 虚拟方法以进行精确控制,但如果这些方法没有实现,则系统会为它们生成实现。
在以下示例中,上述方法已实现,但如果这些方法没有实现,消息仍然可用。
using UnityEngine;
using UnityEngine.Networking;
class SpawnMessage : MessageBase
{
public uint netId;
public NetworkHash128 assetId;
public Vector3 position;
public byte[] payload;
// This method would be generated
public override void Deserialize(NetworkReader reader)
{
netId = reader.ReadPackedUInt32();
assetId = reader.ReadNetworkHash128();
position = reader.ReadVector3();
payload = reader.ReadBytesAndSize();
}
// This method would be generated
public override void Serialize(NetworkWriter writer)
{
writer.WritePackedUInt32(netId);
writer.Write(assetId);
writer.Write(position);
writer.WriteBytesFull(payload);
}
}
Deserialize | 此方法用于通过 NetworkReader 流填充消息对象。 |
Serialize | 此方法用于通过消息对象填充 NetworkWriter 流。 |