英文原文:
https://mirror-networking.gitbook.io/docs/guides/communications/network-messages
在大多数情况下,我们建议使用高级命令和 RPC 调用以及 SyncVar,但您也可以发送低级网络消息。如果您希望客户端发送与游戏对象无关的消息,例如日志记录、分析或分析信息,这将很有用。
有一个名为 NetworkMessage 的公共接口,您可以扩展它来制作可序列化的网络消息结构。这个接口有序列化和反序列化函数,它们接受写入器和读取器对象。您可以自己实现这些功能,但我们建议您让 Mirror 为您生成它们。
自动生成的序列化/反序列化可以有效地处理任何支持的镜像类型。公开您的成员。如果您需要类或复杂的容器,例如 List 和 Dictionary,您必须自己实现 Serialize 和 Deserialize 方法。
要发送消息,请使用 NetworkClient、NetworkServer 和 NetworkConnection 类的 Send() 方法,它们都使用派生自 NetworkMessage 的消息结构以相同的方式工作。下面的代码演示了如何发送和处理消息:
要声明自定义网络消息类并使用它:
using UnityEngine;
using Mirror;
public class Scores : MonoBehaviour
{
public struct ScoreMessage : NetworkMessage
{
public int score;
public Vector3 scorePos;
public int lives;
}
public void SendScore(int score, Vector3 scorePos, int lives)
{
ScoreMessage msg = new ScoreMessage()
{
score = score,
scorePos = scorePos,
lives = lives
};
NetworkServer.SendToAll(msg);
}
public void SetupClient()
{
NetworkClient.RegisterHandler<ScoreMessage>(OnScore);
NetworkClient.Connect("localhost");
}
public void OnScore(ScoreMessage msg)
{
Debug.Log("OnScoreMessage " + msg.score);
}
}
请注意,此源代码示例中没有 ScoreMessage 类的序列化代码。 Mirror 为此类自动生成序列化函数的主体。