多人游戏专用服务器
专用服务器
专用服务器在没有窗口、也没有玩家的情况下运行游戏。它保存每位玩家都会看到的损伤状态,但不绘制其中任何内容。本页列出服务器计算什么、跳过什么,以及在控制台和发布构建中会遇到什么。
服务器计算什么
Section titled “服务器计算什么”- 真实的晶格。 服务器应用它接受的命中,并将发生变化的块发布给客户端。它以权威身份运行 Repair 和 Wash。参见复制与预测。
- 铰接部件。 对于服务器模拟的车辆,服务器决定部件何时松开,并根据凹陷决定部件何时脱落,并发布这两者。它不摆动这些部件,也从不将部件甩脱,因为它不运行铰链物理。
- 车身碰撞。 车身的碰撞同样会在服务器上跟随其凹陷变化,因此服务器上的车身会遇到与客户端相同的凹陷。
- 玻璃判定。 服务器判定每块玻璃板是否开裂或碎裂。它不写入玻璃板数据,不生成玻璃碎片,不创建碎片系统(默认的那个在那里从不加载),也不播放声音。
- 可破坏单元和树木。 服务器决定单元的等级,并决定树木何时屈服和停稳。它不生成碎片,因为它没有碎片池,并且跳过了树木的视觉处理。
- 损伤事件。
OnDamageChanged在每一端上触发,包括专用服务器,触发依据是服务器已确认的损伤。
它不绘制什么
Section titled “它不绘制什么”- 没有图集。 服务器没有渲染子系统,因此不绘制任何凹陷、漆面或污垢。
- 没有污垢事件。 服务器不构建污垢网格,因此
OnDirtChanged、OnWashed和OnWheelSurfaceChanged在那里永远不会触发。AddDirt和WashAt只作用于调用它们的那一端。 - 没有车轮。 在 Server 模型下,车辆适配器会关闭其 tick,且不显示车轮。轮胎、滚动声音和滚动 FX,以及发动机声音在服务器上全部处于空闲状态。
- 没有声音或特效。 撞击反馈在专用服务器上不播放任何内容,Play Impact 调用也一样。
控制台和构建
Section titled “控制台和构建”- 服务器上的
Crushform.Stats会以Crushform atlas: none in this process (a dedicated server draws nothing).代替图集行。其后的晶格行显示server lattice。 Crushform.Stats、Crushform.Debug、Crushform.ShowZones、Crushform.ShowCollision、Crushform.RepairAll和Crushform.DebugImpact在 Shipping 构建中会被编译排除。轮胎变量,例如Crushform.Tire.Enable,仍然保留。CrushformDebug模块在 Shipping 构建中被禁止,因此调试模式不属于 Shipping 构建的一部分。不支持 Development 服务器搭配 Shipping 客户端。Crushform.DebugMode.AllowClients决定远程客户端能否使用服务器的调试工具。其默认值为 1。将其设为 0,可将这些工具仅限于主机使用。- 全部 12 个运行时模块都列出了 Win64、Linux 和 Mac,因此 Linux 服务器构建同样受支持。
检查是否正常工作
Section titled “检查是否正常工作”从引擎的 Binaries\Win64 文件夹运行一个真正的专用服务器进程:UnrealEditor.exe "<path to your .uproject>" -server -game -log。Play In Editor 并非专用服务器:它的服务器运行在编辑器内部,编辑器拥有渲染子系统,因此在那里永远不会出现 none in this process 这一行。
在服务器的日志控制台(-log 打开的窗口)中输入 Crushform.Stats。只有图集那一行表明服务器不绘制任何内容:
Crushform atlas: none in this process (a dedicated server draws nothing).每条形变行都显示 server lattice,其字段列在复制与预测中。屏幕上没有任何可看的内容。从第二个实例连接一个客户端,例如 UnrealEditor.exe "<path to your .uproject>" <server address> -game -windowed,然后将车开向墙壁。服务器那一行的 hits 计数会上升,并且每接受一份客户端报告,其 accepted 计数也会上升。
在发布构建中,控制台命令没有任何作用
Section titled “在发布构建中,控制台命令没有任何作用”原因。 Crushform.Stats、Crushform.Debug、Crushform.ShowZones、Crushform.ShowCollision、Crushform.RepairAll 和 Crushform.DebugImpact 在 Shipping 构建中被编译排除。调试模式位于 CrushformDebug 模块中,而该模块在那里被禁止。轮胎变量,例如 Crushform.Tire.Enable,并未被编译排除,但它们是设置,而不是工具。
修复。 在 Development 构建中发布这些工具。让 Development 服务器与 Development 客户端配套使用,因为不支持 Development 服务器搭配 Shipping 客户端。
服务器上没有任何部件摆动
Section titled “服务器上没有任何部件摆动”原因。 服务器不运行铰链物理。它决定部件何时松开,并根据凹陷决定部件何时脱落,但摆动只显示在进行绘制的端上。
修复。 在客户端上查看摆动。服务器的副本以其发布的已分离部件来体现结果。