注意:已弃用 UNet,未来会将其从 Unity 中删除。一个新系统正在开发中。如需了解更多信息和后续步骤,请参阅此博客文章以及常见问题解答 (FAQ)。 |
Network Manager 组件用于控制联网游戏的状态。此组件在 Editor 中提供了用于配置网络的界面、用于生成游戏对象的预制件以及用于不同游戏状态的场景。
有关在游戏中实现 Network Manager 的更多详细信息,请参阅关于使用 Network Manager 的文档。
属性 | 功能 |
---|---|
Dont Destroy On Load | 使用此属性可控制在场景更改时 Unity 是否应使用 Network Manager 销毁游戏对象。勾选此复选框可确保当游戏中场景发生变化时 Unity 不会销毁 Network Manager 游戏对象。如果希望 Unity 在游戏对象所在的场景不再是活动场景时销毁游戏对象,请取消选中该复选框。如果要在每个场景中管理多个单独的 Network Manager 游戏对象,这非常有用。默认情况下会勾选此复选框。 |
Run In Background | 使用此属性可控制当运行联网游戏的窗口未获得焦点时是否运行游戏。如果希望当运行游戏的窗口未获得焦点时停止运行游戏,请勾选此复选框。默认情况下会勾选此复选框。如果要在同一台机器上运行多个程序实例(例如使用 localhost 进行测试时),则需要启用此属性。在部署到移动平台时,应禁用此属性。启用此属性后会在 Network Manager 启动时将 Application.runInBackground 设置为 true。还可以从 Unity 菜单(Edit > Project Settings,然后选择 Player 类别,并导航到 Resolution and Presentation 面板)中设置此属性。 |
Log Level | 使用此属性可控制 Unity 输出到控制台窗口的信息量。级别越低,产生信息的越多;级别越高,产生的信息越少。每个级别包括来自高于该级别的所有级别的消息(例如,如果选择“Warn”,则控制台还会打印输出所有“Error”和“Fatal”日志消息)。下拉选单按从低到高顺序列出这些级别。默认情况下,此属性设置为 Info。可将 Log Level 设置为 Set in Scripting 来完全阻止 Network Manager 设置日志级别。这意味着可以从您自己的脚本控制级别。 |
Offline Scene | 如果将场景分配给此字段,Network Manager 会在网络会话停止时自动切换到指定的场景;例如,当客户端断开连接时,或服务器关闭时。 |
Online Scene | 如果将场景分配给此字段,Network Manager 会在网络会话开始时自动切换到指定的场景;例如,当客户端连接到服务器时,或者服务器开始监听连接时。 |
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.unity.cn/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 | 要模拟的丢包量(以百分比为单位)。 |