若要在一台机器上测试多人游戏,你需要运行多个游戏实例,一个作为服务器,其他作为客户端。通常,这会为你的复制数据创建具有理想条件的环境。你复制的数据将经适当的系统传送,类似于真实的网络环境,但不会有延迟或数据包丢失,这意味着你无法准确了解数据部署到最终用户时的行为方式。同样,基于LAN的测试不会遇到这些情况。
网络模拟 可以模拟服务器和客户端的延迟和数据包丢失。这对于识别网络环境中可能出现的问题至关重要。可在 虚幻编辑器、命令行、控制台或配置文件中配置网络模拟设置。
启用网络模拟
虚幻编辑器
要使用网络模拟,请从 菜单栏 导航到 编辑(Edit)> 编辑器偏好设置(Editor Preferences)> 关卡编辑器(Level Editor)> 运行(Play)> 多人游戏选项(Multiplayer Options),然后选中 启用网络模拟(Enable Network Emulation) 复选框。此操作将启用网络模拟设置。
虚幻编辑器包含预先构建的 网络模拟描述(Network Emulation Profiles),其中包括:自定义(Custom)、平均(Average) 和 不佳(Bad)。这些描述使用提供的字段来自定义网络模拟设置:
- 传入流量(Incoming Traffic):导致数据包接收延迟或丢失
- 最小延迟(Minimum Latency):以毫秒为单位的最小时间延迟(对应于
PktIncomingLagMin) - 最大延迟(Minimum Latency):以毫秒为单位的最大时间延迟(对应于
PktIncomingLagMax) - 数据包丢失百分比(Packet Loss Percentage):在接收数据包之前发生数据包丢失的几率(对应于
PktIncomingLoss)
- 最小延迟(Minimum Latency):以毫秒为单位的最小时间延迟(对应于
- 传出流量(Outgoing Traffic):导致数据包发送延迟或丢失
- 最小延迟(Minimum Latency):以毫秒为单位的最小时间延迟(对应于
PktLagMin) - 最大延迟(Minimum Latency):以毫秒为单位的最大时间延迟(对应于
PktLagMax) - 数据包丢失百分比(Packet Loss Percentage):在发送数据包之前发生数据包丢失的几率(对应于
PktLoss)
- 最小延迟(Minimum Latency):以毫秒为单位的最小时间延迟(对应于
命令行
可使用以下语法通过命令行参数指定设置:
<SETTING_NAME>=<VALUE>
控制台
可使用以下语法在运行时从控制台指定设置:
NetEmulation.<SETTING_NAME> <VALUE>
配置文件
要从引擎配置文件(如 DefaultEngine.ini)中设置这些值,请向配置文件中添加 [PacketSimulationSettings] 分段,后跟要指定的 <SETTING_NAME>=<VALUE> 对:
[PacketSimulationSettings]
<SETTING_NAME>=<VALUE>
<SETTING_NAME>=<VALUE>
...
设置参考
这些设置提供了多种组合来自定义网络模拟:
| 设置 | 描述 | 值 |
|---|---|---|
Off |
关闭网络模拟 | 切换命令,不需要值。 |
PktLoss |
指定丢弃出站数据包的几率百分比以模拟数据包丢失。 | 介于0(无数据包丢弃)和100(丢弃所有数据包)之间的钳位值。 |
PktOrder |
随机更改数据包顺序。方法是随机选择要延迟到后续调用 FlushNet 的数据包。 |
0 = False,所有其他值 = True |
PktDup |
指定发送的出站数据包出现重复的几率百分比。 | 介于0(无数据包重复)和100(所有数据包均重复)之间的钳位值。 |
PktLag |
将数据包的发送延迟指定的时长(以毫秒为单位)。注意:不能与 PktOrder 一起使用。 |
以毫秒为单位的值。 |
PktLagVariance |
使数据包延迟作为随机变量,而不是以毫秒为单位的常量时间。如果进行此设置,延迟会成为 [PktLag - PktLagVariance, PktLag + PktLagVariance] 范围内的随机变量。注意:仅当启用 PktLag 后才能启用此设置。 |
随机选择 [-Variance, Variance] 范围内的值。 |
PktLagMin |
使数据包具有最小延迟量。 | 以毫秒为单位的值。 |
PktLagMax |
使数据包具有最大延迟量。 | 以毫秒为单位的值。 |
PktIncomingLagMin |
使数据包对接收端具有最小延迟量。 | 以毫秒为单位的值。 |
PktIncomingLagMax |
使数据包对接收端具有最大延迟量。 | 以毫秒为单位的值。 |
PktIncomingLoss |
指定丢弃入站数据包的几率百分比以模拟数据包丢失。 | 介于0(无数据包丢弃)和100(丢弃所有数据包)之间的钳位值。 |
PktJitter |
为可能的数据包延迟时间范围加上 PktJitter 的值,使发送的数据包具有可变的波动延迟。 |
以毫秒为单位的值。 |
PktEmulationProfile |
设置预定义的模拟描述。 | 描述名称。 |
使用建议
多人游戏在最佳连接状态下运行时,不会遇到很多只有在连接不佳时才会出现的漏洞。为确保捕获这些漏洞,你应该在极其严苛的条件下执行本地测试和基于LAN的测试。例如:
- 500往返ping。
- 10%的数据包丢失或更高。
Epic Games 会使用这类条件来测试合作性和竞争性的Gameplay。这使得捕获大量漏洞和错误成为可能,而不是将其忽视,同时强烈推进网络性能的优化。