Version: 2020.2
Network Identity
Network Lobby Player

Network Lobby Manager

注意:已弃用 UNet,未来会将其从 Unity 中删除。一个新系统正在开发中。如需了解更多信息和后续步骤,请参阅此博客文章以及常见问题解答 (FAQ)

NetworkLobbyManager 是一种专用类型的 NetworkManager,可在进入游戏的主游戏场景之前提供多人游戏大厅。此组件可用于设置网络的以下属性:

  • 玩家最大限制
  • 所有玩家准备好后自动开始
  • 用于阻止玩家加入正在进行的游戏的选项
  • 支持“Couch Multiplayer”(即每个客户端有多个玩家)
  • 可自定义玩家在大厅选择选项的方式

NetworkLobbyManager 有两种类型的玩家对象:

LobbyPlayer 对象

  • 每个玩家一个
  • 客户端连接时或添加玩家时创建
  • 在客户端断开连接之前一直存在
  • 保留就绪标志和配置数据
  • 处理大厅中的命令
  • 应使用 NetworkLobbyPlayer 组件

GamePlayer 对象

  • 每个玩家一个
  • 启动游戏场景时创建
  • 重新进入大厅时被销毁
  • 处理游戏中的命令

属性

属性: 功能:
showLobbyGUI 显示大厅的开发者 OnGUI 控件。
maxPlayers 大厅中允许的最大玩家数量。
maxPlayersPerConnection 允许为每个客户端连接添加的最大玩家数。
lobbyPlayerPrefab 当玩家进入大厅时为玩家创建的预制件。
gamePlayerPrefab 当游戏启动时为玩家创建的预制件。
lobbyScene 要用于大厅的场景。
playScene 要用于主要游戏的场景。

详细信息

  • lobbyPlayerPrefab 字段应该由一个包含 NetworkLobbyPlayer 组件的对象填充。
  • Lobby Manager 有一个 GUI。请参阅多人游戏大厅资源包。

Network Lobby Manager

Network Lobby Manager 是一种专用类型的 NetworkManager,可在进入游戏的主游戏场景之前提供易于使用的多人游戏大厅。

Network Lobby Manager 具有许多内置功能,这些功能对于多人游戏来说很常见。例如,它支持设置最大玩家数量限制,在所有玩家准备就绪时自动启动游戏,以及防止玩家加入正在进行的游戏的选项。Network Lobby Manager 还支持“Couch Multiplayer”,让多个玩家使用同一个客户端一起玩游戏。

Network Lobby Manager 组件
Network Lobby Manager 组件

|属性: |功能: | |:—|:—| |Show Lobby GUI|启用此属性可显示大厅的开发者 GUI 控件。此属性仅用于方便开发者。您应该为玩家创建您自己的 UI 以便在完成的游戏中使用。|
|Max Players|大厅中允许的最大玩家数量。|
|Max Players Per Connection|允许为每个客户端连接添加的最大玩家数。|
|Min Players|大厅需要的玩家的最低数量。|
|Lobby Player Prefab|当玩家进入大厅时为玩家创建的预制件。|
|Game Player Prefab|当游戏启动时为玩家创建的预制件。|
|Lobby Scene|要用于大厅的场景。|
|Play Scene|要用于主要游戏的场景。| ||| |:–|:–| |Network Info|可以展开 Inspector 的此部分来访问与网络相关的设置,如下所示| |Use Web Sockets|在作为主机运行时,启用此设置会使主机监听 WebSocket 连接,而不是普通传输层连接,以便 WebGL 客户端可以连接到主机(如果为 WebGL 平台构建游戏)。游戏中的这些 WebGL 实例不能充当主机(无论是在“对等托管”模式下还是在“仅服务器”模式下)。因此,要使多人游戏的 WebGL 实例能够找到彼此并一起玩游戏,必须使用可公开访问的 IP 地址,托管 LAN 模式下运行的游戏的“仅服务器”实例,并且必须启用此选项。默认情况下会取消勾选此复选框。| |Network Address|当前使用的网络地址。对于客户端,这是已连接到的服务器的地址。对于服务器,这是本地地址。默认设置为“localhost”。| |Network Port|当前使用的网络端口。对于客户端,这是已连接到的服务器的端口。对于服务器,这是监听端口。默认情况下,该值设置为 7777。| |Server Bind To IP|告知服务器是否绑定到特定 IP 地址。如果不勾选此复选框,则不会有任何要绑定到的特定 IP 地址 (IP_ANY)。默认情况下会取消勾选此复选框。如果您的服务器有多个网络地址(例如,内部 LAN、外部互联网、VPN),并且您希望游戏采用特定 IP 地址,请使用此属性。| |Server Bind Address|只有在勾选了 Server Bind To IP 复选框时,此字段才可见。使用此字段可输入服务器应该绑定到的特定 IP 地址。| |Script CRC Check|启用此属性后,Unity 将检查客户端和服务器是否使用匹配的脚本。此属性可用于确保客户端的过时版本无法连接到服务器的最新(更新)版本。默认情况下会勾选此复选框。具体原理是在服务器与客户端之间执行 CRC 校验,从而确保 NetworkBehaviour 脚本匹配。这可能不适合某些情况,例如,当您故意对客户端和服务器使用不同的 Unity 项目时。但是,在大多数其他情况下,此属性应该保持启用。| |Max Delay|延迟缓冲消息的最长时间(以秒为单位)。默认为 0.01 秒,这意味着数据包最多将延迟 10 毫秒。将此属性设置为零将禁用 HLAPI 连接缓冲功能。默认情况下,该值设置为 0.01。| |Max Buffered Packets|NetworkConnection 可为每个通道缓冲的最大数据包数量。这对应于 ChannelOption.MaxPendingBuffers 通道选项。默认情况下,该值设置为 16。| |Packet Fragmentation|这允许 NetworkConnection 实例分割大于 maxPacketSize 的数据包,最大为 64K。这可能导致在发送大数据包时出现延迟。默认情况下会勾选此复选框。 | |MatchMaker Host URI|MatchMaker 服务器的主机地址。默认情况下,指向位于 mm.unet.unity3d.com 的全球 Unity Multiplayer 服务,通常您不需要更改此设置。Unity 会自动将游戏玩家分组到全球各地的区域服务器中,这确保了在多人游戏中同一地区的玩家之间实现快速响应。例如,这意味着来自欧洲、美国和亚洲的玩家通常最终会与来自同一区域的其他玩家一起玩游戏。可以覆盖此值来显式控制游戏连接到的区域服务器。如果想让玩家选择加入所在区域之外的服务器,可以通过编写脚本来实现。例如,如果美国的“玩家 A”想要连接到由欧洲“玩家 B”通过 Matchmaker 创建的比赛,他们需要能够在游戏中设置所需的区域。因此,需要编写一个 UI 功能,允许玩家选择此设置。要了解更多信息和区域服务器 URI,请参阅有关 NetworkMatch.baseUri 的 API 参考文档。| |MatchMaker Port|Matchmaker 服务器的主机端口。默认指向端口 443,通常不需要更改此设置。| |Match Name|定义当前比赛的名称。默认设置为“default”。| |Maximum Match Size|定义当前比赛中的最大玩家数量。默认情况下,该值设置为 4。| |SpawnInfo|可以展开 Inspector 的此部分来访问与生成相关的设置,如下所示| |Player Prefab|定义 Unity 在服务器上创建玩家游戏对象时应该使用的默认预制件。Unity 将在服务器上 AddPlayer 的默认处理程序中创建玩家游戏对象。实现 (OnServerAddPlayer)[https://docs.unity3d.com/ScriptReference/Networking.NetworkManager.OnServerAddPlayer.html] 可覆盖这种行为。| |Auto Create Player|如果希望在连接时以及在场景改变时 Unity 自动创建玩家游戏对象,请勾选此复选框。默认情况下会勾选此复选框。注意,如果使用的是 MigrationManager,并且不启用 Auto Create Player,则需要在客户端重新连接时调用 ClientScene.SendReconnectMessage。| |Player Spawn Method|定义 Unity 应该如何决定生成新玩家游戏对象的位置。默认设置为 Random。| |    Random|选择 Random 可根据随机选择的 startPositions 生成玩家。| |    Round Robin|选择 Round Robin 可循环使用预设列表中的 startPositions。| |Registered Spawnable Prefabs|使用此列表添加您希望 Network Manager 可以识别的预制件,以便它可以生成这些预制件。也可以通过编写脚本来添加和删除这些预制件。| |Advanced Configuration|勾选此复选框可在 Network Manager Inspector 窗口中显示高级配置选项。| |    Max Connections|定义要支持的最大并发网络连接数量。默认情况下,该值设置为 4。| |    Qos Channels|这是一个列表,其中包含当前 Network Manager 所具有的不同通信通道以及每个通道的服务质量 (QoS) 设置。使用此列表可添加或删除通道以及调整其 QoS 设置。也可以通过编写脚本来配置这些通道。有关每个 QoS 选项的描述,请参阅 QosType。| |    Timeouts|| |        Min Update Timeout|设置网络线程在前后两次网络消息发送之间等待的最短时间(以毫秒为单位)。网络线程不会立即发送多人游戏网络消息。而是按照固定频率检查每个连接是否有要发送的内容。默认设置为 10ms。请参阅关于 MinUpdateTimeout 的 API 参考文档以了解更多信息。| |        Connect Timeout|定义 Unity 应在等待多长时间之后再尝试下一次连接(以毫秒为单位)。默认设置为 2000ms。请参阅关于 ConnectTimeout 的 API 参考文档以了解更多信息。| |        Disconnect Timeout|Unity 在多长时间之后认为某个连接已经断开(以毫秒为单位)。默认设置为 2000ms。请参阅关于 DisconnectTimeout 的 API 参考文档以了解更多信息。| |        Ping Timeout|发送 ping 命令(也称为“保持活动状态”数据包)的时间间隔(以毫秒为单位)。ping 超时时间应该设为 Disconnect Timeout 持续时间的大约三分之一到四分之一,这样,只有在服务器无法从客户端接收到至少三个 ping 之后,Unity 才会认为客户端已经断开连接。默认设置为 500ms。请参阅关于 ConnectionConfig.PingTimeout 的 API 参考文档以了解更多信息。| |    Global Config|这些设置与 Reactor 有关。Reactor 是多人游戏系统的一部分,负责从底层操作系统接收网络数据包,并将它们传递到多人游戏系统进行处理。| |        Thread Awake Timeout|Reactor 使用的超时持续时间(以毫秒为单位)。Reactor 如何使用这个值取决于选择的 Reactor Model(见下文)。默认设置为 1ms。| |        Reactor Model|选择要使用的 Reactor 类型。Reactor Model 定义了 Unity 读取传入数据包的方式。对于大多数游戏和应用程序,默认的 Select Reactor 是合适的设置。如果希望以处理网络消息时的少许延迟为代价降低 CPU 使用率和提高电池续航时间,请使用 Fix Rate Reactor。| |        Select Reactor|此模型使用 select() API,这意味着网络线程在数据包可用后立即“唤醒”(变为活动状态)。使用这种方法意味着游戏会尽可能快地获得数据。这是 Reactor Model 的默认设置。| |        Fix Rate Reactor|使用该模型可以通过手动方式让网络线程在给定的时间内睡眠(具体时间是由 Thread Awake Timeout 中的值定义),然后再检查是否有传入的数据包等待处理。| |        Reactor Max Recv Messages|设置接收队列中存储的最大消息数量。默认设置为 1024 条消息。| |        Reactor Max Sent Messages|设置发送队列中存储的最大消息数量。默认设置为 1024 条消息。| |Use Network Simulator|勾选此复选框便可以使用网络模拟器。网络模拟器引入了基于以下设置的模拟延迟和丢包:| |    Simulated Average Latency|要模拟的延迟时间量(以毫秒为单位)。| |    Simulated Packet Loss|要模拟的丢包量(以百分比为单位)。|

Network Identity
Network Lobby Player