Mirror 常用组件

Mirror 常用组件

Mirror 是 Unity 的一个高性能、轻量级的网络库,它能够帮助开发者快速搭建网络游戏和应用程序。Mirror 提供了多个网络组件,以下是其中五个常用组件的详细介绍。

NetworkManager

介绍

NetworkManager 组件负责管理网络连接,它可以启动服务器和客户端,并处理网络连接、断开、重连等操作。同时,NetworkManager 还提供了一些事件回调函数,例如 OnServerConnect、OnClientDisconnect 等,可以方便地处理网络事件。

方法

  • StartServer():启动服务器。

  • StartClient():启动客户端。

  • StopServer():停止服务器。

  • StopClient():停止客户端。

举例子

以下是几个常见的代码例子,演示了如何使用 NetworkManager 组件:

例子 1:启动服务器和客户端
using UnityEngine;
using Mirror;

public class MyNetworkManager : NetworkManager
{
    public void StartServer()
    {
        base.StartServer();
    }

    public void StartClient()
    {
        base.StartClient();
    }

    public void StopServer()
    {
        base.StopServer();
    }

    public void StopClient()
    {
        base.StopClient();
    }
}

在这个例子中,我们创建了一个名为 MyNetworkManager 的类,并继承了 NetworkManager 组件。我们通过调用基类的 StartServer 和 StartClient 函数来启动服务器和客户端,通过调用基类的 StopServer 和 StopClient 函数来停止服务器和客户端。

NetworkIdentity

介绍

NetworkIdentity 组件用于标识网络游戏对象,它可以在网络中同步游戏对象的状态和属性。当一个游戏对象被标识为 NetworkIdentity 时,它会自动在服务器和客户端之间同步其位置、旋转、缩放、变量等属性。

方法

  • AssignClientAuthority(NetworkConnection conn):将网络对象的所有权分配给指定的客户端连接。

  • RemoveClientAuthority(NetworkConnection conn):从指定的客户端连接中移除网络对象的所有权。

举例子

以下是一个常见的例子,演示了如何使用 NetworkIdentity 组件:

例子:标识网络对象
using UnityEngine;
using Mirror;

public class MyNetworkObject : NetworkBehaviour
{
    // 在网络中同步的变量
    [SyncVar]
    public int score;

    void Start()
    {
        // 检查是否是本地客户端
        if (isLocalPlayer)
        {
            // 分配客户端所有权
            CmdAssignClientAuthority();
        }
    }

    [Command]
    void CmdAssignClientAuthority()
    {
        // 将网络对象的所有权分配给本地客户端
        if (connectionToClient != null)
        {
            AssignClientAuthority(connectionToClient);
        }
    }
}

在这个例子中,我们创建了一个名为 MyNetworkObject 的类,并继承了 NetworkBehaviour 组件。我们使用 [SyncVar] 属性将 score 变量在网络中同步,并在 Start 函数中检查是否是本地客户端。如果是本地客户端,我们使用 CmdAssignClientAuthority 函数将网络对象的所有权分配给客户端。

NetworkBehaviour

介绍

NetworkBehaviour 组件用于处理网络消息,它可以在服务器和客户端之间同步游戏对象的状态和属性。当一个游戏对象被标识为 NetworkIdentity 时,它会自动在服务器和客户端之间同步其位置、旋转、缩放、变量等属性。

方法

  • Send<T>(T message, int channelId = Channels.DefaultReliable):向服务器或客户端发送网络消息。

  • [Command]:用于标记一个客户端调用的远程过程调用(RPC)函数。

  • [ClientRpc]:用于标记一个服务器调用的远程过程调用(RPC)函数。

举例子

以下是一个常见的例子,演示了如何使用 NetworkBehaviour 组件:

例子:同步游戏对象的位置和旋转
using UnityEngine;
using Mirror;

public class MyNetworkObject : NetworkBehaviour
{
    // 在网络中同步的变量
    [SyncVar]
    public Vector3 position;

    [SyncVar]
    public Quaternion rotation;

    void Update()
    {
        if (isLocalPlayer)
        {
            // 更新本地游戏对象的位置和旋转
            position = transform.position;
            rotation = transform.rotation;
        }
        else
        {
            // 同步远程游戏对象的位置和旋转
            transform.position = position;
            transform.rotation = rotation;
        }
    }
}

在这个例子中,我们创建了一个名为 MyNetworkObject 的类,并继承了 NetworkBehaviour 组件。我们使用 [SyncVar] 属性将 position 和 rotation 变量在网络中同步,并在 Update 函数中更新本地游戏对象的位置和旋转,以及同步远程游戏对象的位置和旋转。

NetworkTransform

介绍

NetworkTransform 组件用于同步游戏对象的位置、旋转和缩放等属性,它可以在服务器和客户端之间同步游戏对象的状态。当一个游戏对象被标识为 NetworkIdentity,并添加了 NetworkTransform 组件时,它会自动在服务器和客户端之间同步其位置、旋转、缩放等属性。

方法

  • SetDirtyBit(int dirtyBit):将指定的 dirty bit 设置为脏标志,以便在网络中同步。

举例子

以下是一个常见的例子,演示了如何使用 NetworkTransform 组件:

例子:同步游戏对象的位置和旋转
using UnityEngine;
using Mirror;

public class MyNetworkObject : NetworkBehaviour
{
    // 在网络中同步的变量
    [SyncVar]
    public Vector3 position;

    [SyncVar]
    public Quaternion rotation;

    // 添加 NetworkTransform 组件
    [SerializeField]
    NetworkTransform networkTransform;

    void Update()
    {
        if (isLocalPlayer)
        {
            // 更新本地游戏对象的位置和旋转
            position = transform.position;
            rotation = transform.rotation;

            // 设置 NetworkTransform 组件的脏标志
            networkTransform.SetDirtyBit(1 << 0);
        }
    }
}

在这个例子中,我们创建了一个名为 MyNetworkObject 的类,并继承了 NetworkBehaviour 组件。我们使用 [SyncVar] 属性将 position 和 rotation 变量在网络中同步,并添加了 NetworkTransform 组件来同步游戏对象的位置、旋转和缩放等属性。在 Update 函数中,我们更新本地游戏对象的位置和旋转,并使用 SetDirtyBit 函数将 NetworkTransform 组件的脏标志设置为 1。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忽然602

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值