通用

Mirror 是一个用于构建 Unity 游戏的多人游戏功能的系统。它建立在较低级别的传输实时通信层之上,并处理许多多人游戏所需的常见任务。虽然传输层支持任何类型的网络拓扑结构,Mirror 是一个服务器授权系统;尽管它允许参与者之一同时充当客户端和服务器,因此不需要专用服务器进程。与互联网服务配合使用,这使得多人游戏可以在互联网上进行,开发者几乎不需要做太多工作。

Mirror 专注于易用性和迭代开发,并为多人游戏提供了有用的功能,例如:

  • 消息处理程序

  • 通用高性能序列化

  • 分布式对象管理

  • 状态同步

  • 网络类:服务器(Server)、客户端(Client)、连接(Connection)等

Mirror 是由一系列添加功能的层构建而成:

服务器和主机

Mirror 多人游戏包括:

  • 服务器 服务器是所有其他玩家在想要一起玩时连接的游戏实例。服务器通常管理游戏的各个方面,如计分,并将数据传输回客户端。

  • 客户端 客户端是通常从不同计算机连接到服务器的游戏实例。客户端可以通过本地网络或在线连接。

客户端是连接到服务器的游戏实例,以便玩游戏的人可以与其他人一起玩游戏,其他人连接到自己的客户端。

服务器可以是“专用服务器”或“主机服务器”。

  • 专用服务器 这是仅用于充当服务器的游戏实例。

  • 主机服务器 当没有专用服务器时,其中一个客户端也扮演服务器的角色。这个客户端是“主机服务器”。主机服务器创建游戏的单个实例(称为主机),既充当服务器又充当客户端。

下面的图表代表了多人游戏中的三个玩家。在这个游戏中,一个客户端同时充当主机,这意味着该客户端本身是“本地客户端”。本地客户端连接到主机服务器,两者在同一台计算机上运行。另外两个玩家是远程客户端 - 也就是说,它们位于不同的计算机上,连接到主机服务器。

主机是您的游戏的单个实例,同时充当服务器和客户端。主机使用一种特殊类型的内部客户端进行本地客户端通信,而其他客户端是远程客户端。本地客户端通过直接函数调用和消息队列与服务器通信,因为它们在同一进程中。它实际上与服务器共享场景。远程客户端通过常规网络连接与服务器通信。当您使用 Mirror 时,所有这些都会自动处理。

多人游戏系统的一个目标是使本地客户端和远程客户端的代码相同,这样在开发游戏时大部分时间只需考虑一种类型的客户端。在大多数情况下,Mirror会自动处理这种差异,因此您很少需要考虑代码在本地客户端或远程客户端上运行时的差异。

实例化和生成

在 Unity 中制作单人游戏时,通常使用 GameObject.Instantiate 方法在运行时创建新的游戏对象。然而,在多人游戏系统中,服务器本身必须“生成”游戏对象,以便它们在网络游戏中处于活动状态。当服务器生成游戏对象时,它会触发连接客户端上游戏对象的创建。生成系统管理游戏对象的生命周期,并根据您设置游戏对象的方式同步游戏对象的状态。

有关网络实例化和生成的更多详细信息,请参阅有关生成游戏对象的文档。

玩家和本地玩家

Mirror 对玩家游戏对象和非玩家游戏对象进行了不同处理。当新玩家加入游戏(当新客户端连接到服务器时),该玩家的游戏对象在该玩家的客户端上变为“本地玩家”游戏对象,并且 Mirror 将玩家的连接与玩家的游戏对象关联起来。Mirror 为每个玩家玩游戏的人关联一个玩家游戏对象,并将网络命令路由到该个别游戏对象。玩家无法在另一个玩家的游戏对象上调用命令,只能在自己的游戏对象上调用。

有关更多详细信息,请参阅有关玩家游戏对象的文档GameObjects

权限

服务器和客户端都可以管理游戏对象的行为。 “权限” 的概念指的是游戏对象的管理方式和位置。 Mirror 默认情况下基于“服务器权限” ,其中服务器对所有游戏对象具有权限。 玩家游戏对象是一个特殊情况,被视为具有“本地权限”。 您可能希望使用不同的权限系统构建游戏 - 有关更多详细信息,请参阅Network Authority

最后更新于

这有帮助吗?