应该从此类派生网络消息类。然后,可以使用 NetworkConnection、NetworkClient 和 NetworkServer 的各种 Send 函数发送这些消息类。
派生自 MessageBase 的类的公共数据字段将自动通过该类实现序列化。开发者可以实现 Serialize 和 Deserialize 虚拟方法以进行精确控制,但如果这些方法没有实现,则系统会为它们生成实现。
注意:Unity 使用自己的网络序列化系统。该系统不支持 NonSerialized 属性,而是使用私有变量。
在以下示例中,上述方法已实现,但如果这些方法没有实现,消息仍然可用。
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 流。 |