跳至正文

2 月:UE5 与网络主控!

· 10 分钟读完
Gabriel • SyedMuhammad
lead developer™

虚幻引擎 5 预览版,全新网络主控系统、商店 API 及更多内容

网络主控系统​

众所周知,nanos world 在物理和其他世界运行上依赖于“无服务器”解决方案。所有的同步都依赖于玩家之间的数据共享以及在每个客户端中的复制。这种方法带来了一些优势,当然也有一些缺点。优点包括我们可以拥有一个极度轻量级的服务器并完全掌握其控制权,而无需依赖虚幻引擎的服务器可执行程序及其处理网络的方式。

另一方面,我们在如何分发物理信息和其他数据方面面临着一些挑战。因此在最开始,我们创建了第一个网络主控系统,其中每个玩家负责将来自服务器的一组特定实体共享给其他人,类似于 Roblox 的解决方案。

然而,就像在 Roblox 中一样,当许多 ping 值各不相同的玩家连接进来时,某些问题会变得更加明显。由于某些玩家会比其他人更快接收到对实体的“网络主控”,他们会开始向其他玩家共享自己的位置/旋转信息,而“旧的”网络主控者可能因为尚未收到“失去网络主控”的消息,仍然认为自己掌握着控制权。

我们制作了这张示意图来说明该问题:

正如你所见,当玩家之间的 ping 存在差异时,切换网络主控会出现“空隙”和“重叠”,从而导致物理对象出现各种异常行为。

考虑到这一点,在经过深入研究后,我们改进了网络主控系统使其更加稳健。这种新方法旨在填补空隙并忽略重叠:

尽管仍处于“Beta”版本,但通过这个新系统,我们打算改善一直以来出现的各种“警告”和闪烁问题。欢迎大家提出反馈!

新的调试模式​

随着新网络主控系统的加入,我们在设置中新增了一个调试区。

其中一个很酷的设置是 绘制网络调试,它可以在游戏世界中实时绘制出所有网络信息:

你可以在网络主控页面中找到更多详细信息。

此外,你还可以伪造“丢包”,以模拟部分同步数据被丢弃的情况。

商店 API​

上个月我们推出了商店,这是一个与游戏内置集成的平台,用于分享和下载社区资产与包。

现在我们正在发布商店 API:你可以通过 HTTP 请求下载、上传和编辑你的资源,欢迎前往 https://api.nanos.world/store/docs 查看 Swagger 文档。更多教程即将推出™。

文档更改​

模块​

我们新增了一篇关于如何创建自定义 C 模块的教程。你可以在 模块 页面中查看。

虚幻引擎 5:预览版​

一周前,Epic Games 带来了令人振奋的好消息:他们发布了 Unreal Engine 5: Preview。预览版本的发布意味着大部分功能已经具备,且几乎达到了最终正式发布状态。

而作为技术爱好者,结合我们之前博客新闻里提到的内容(11 月:虚幻引擎 5?),我们决定再次尝试将 nanos world 迁移并转换为虚幻引擎 5 版本。接下来谈谈我们的使用感受:

迁移 nanos world​

这次将 nanos world 迁移到虚幻引擎 5:预览版更加棘手,我们遇到了更多已弃用的方法,以及部分功能的变更与移除,这需要我们付出相当大的努力去转换代码并调试那些改动过的部分。

相比抢先体验版本,我们不得不更新代码和文件以确保项目能够成功启动。此外,由于新的 Chaos引擎彻底改变了载具的实现方式,我们不得不暂时禁用载具,因为我们目前还不想耗费精力去转换它们。

图形​

虚幻引擎 5 引入了 Lumen,这是一种全新的动态全局光照方案,体验起来非常酷且令人印象深刻。以下是在我们的测试地图中截取的一些截图:

提示

接下来你可以看到物体的颜色是如何动态反射到环境光照中的。

提示

在这里我们可以看到自发光材质对周围环境的色彩贡献。

一个很棒的功能是,我们可以开启硬件加速计算 Lumen(用以替换硬件光线追踪),在 RTX 3070 上的测试表明,它能在极低 GPU 开销下带来更加出色的画面。

技术性​

在技术方面,虚幻 5 带来的最大变革有:

  • Lumen(动态全局光照)
  • Nanite(网格体虚拟化)
  • Chaos(全新的物理引擎)
  • 以及同样非常重要的、关于世界/关卡构建的新特性(One File Per Actor 与 World Partition)

尽管 Lumen、Nanite 和世界特性可以随时开启或关闭(我们可以自由选择是否使用),但对 Chaos 来说却并非如此。虚幻引擎正彻底移除 PhysX,并用新的物理引擎取而代之:Chaos。虽然我们对新事物抱持开放态度,但遗憾的是 Chaos 目前似乎还不够完善,至少还没达到 PhysX 的成熟度与稳定性。

我们遇到了不少碰撞错误,比如物体闪烁、错误的“碰撞箱”、物体穿墙、绳索(Cable)漏洞、物体无故休眠、命中事件回调异常等等。

对于大部分问题,我们都找到了临时解决方案(比如向某些物体施加力防止其休眠,或者调整绳索设置),但使用 Chaos 遇到的最大问题是命中反馈事件完全不一致。有时它们会以 0 力量触发,破坏了打击音效以及 nanos world 命中事件的正常响应,进而可能破坏游戏玩法/脚本功能。

更不用说物体闪烁/消失/失去碰撞这些问题了,极大地影响了游戏品质的印象。

而且我们甚至都还没开始接入新的 Chaos 载具,真不知道到时候又会踩到什么坑 😅。

稳定性​

实际上,虚幻的这个版本给了我们意料之外的惊喜,崩溃频率比抢先体验版本要少,尽管仍然存在崩溃,不过大多发生在用大量气球、缆绳和道具满天飞进行的高压场景下。不过我也有一丝失望,因为我在抢先体验版本发现的大多数漏洞在这个预览版中依然存在,尚未得到修复。

此外还能注意到一些罕见的漏洞,比如突然被传送回 0, 0, 0 的位置,我们目前还没找出具体原因。

现在换 UE5 值得吗?​

总结一下,对于是否应该“立刻”迁移到虚幻 5,我们根据自身观点总结了一份优缺点清单:

另外还需要考虑一点:我们迟早都会迁移到虚幻引擎 5,唯一的悬念在于“何时”迁移。 😉

缺点 👎​

  • 由 Chaos 引起的与物理相关的游戏玩法漏洞、物体跳跃、闪烁、碰撞出错,以及物体穿透地面/墙壁等问题。
  • 视觉伪影,不仅存在于 Lumen 中,也存在于标准渲染方式中。
  • 虚幻引擎内部的随机崩溃,我们无法自行修复。
  • 更频繁的虚幻引擎更新,我们极有可能还会经历其他预览版本,而在 UE5 正式发布后还会有一系列热修复。每一次更新都极有可能需要我们重新构建所有资产并重新发布新版本,否则它们将无法在新版本中工作。这意味着资产包将无法直接在较新的虚幻版本中使用。
  • 使用 Lumen 有其固有弊端,比如性能消耗,它可能会导致 FPS 下降 25% 到 50%(但可以开启/关闭)。

优点 👍​

  • 我们将成为第一批探索虚幻引擎 5 的人(这可能是一把双刃剑,因为有些问题还没人遇到或解决,但我个人非常热衷于探索新特性和使用新工具)。
  • nanos world 将具备巨大的自主营销潜力,也能吸引大量 UE5 新爱好者来了解、游玩并基于这款游戏进行创作。
  • Lumen 既有趣又惊艳。
  • 全新的世界/关卡工具允许创建大地图,并通过 One File Per Actor 系统和 World Partition 极大改善了协同创作的管线!
  • 全新的虚幻编辑器外观更加清爽,令人愉悦。
  • 包含大量可用的新工具和技术,包括 Nanite、Chaos 破坏系统、动画工具(有助于动态链接自定义动画蓝图)以及全新的 MetaSounds。
  • 每次更新都要从头开始转换 nanos world 来测试稳定性真的很困难。我无法复用之前的转换成果,因为很多更改都在无法合并的蓝图(UI)中,且自那时起发生了很大变化。因此,现在一次性转换完成后,我们就能立即展开深入排查和修复工作,后续测试虚幻引擎的更新也会变得更轻松、更快速。

与抢先体验版不同,这次的版本似乎利大于弊,看起来是一个比以往更适合正式迁移 nanos world 的契机。欢迎加入我们的 Discord 交流想法!我们将发起一项投票,收集来自社区的所有反馈!

社区焦点​

在此想和大家分享过去几周社区制作的精彩内容!

Timmy 做得非常出色,并展示了他全新的物品栏系统:

同时 Timmy 还制作了一个不错的平滑天气系统过渡:

MegaThorx 发布了他全新的 EGUI 库。这是一个用于通过编写脚本直接创建 GUI 的包!它还包含了配套的完整文档!

Voltaism 分享了一个酷炫的实现,在没有玩家参与的情况下,人机可以自主游玩他制作的 VZombies 游戏模式: