[Unity Mirror] Network Messages

81 篇文章 30 订阅

英文原文:

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 为此类自动生成序列化函数的主体。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值