跳至正文

56 篇文章 篇带有标签“updates”

查看所有标签

5 月:修复了 666 个漏洞与 P2P!

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

漏洞清除、P2P 服务器、更好的同步及更多!

漏洞不得通过!​

本月,我们自豪地在问题跟踪器中达到了关闭 666 个问题(修复和/或解决)的令人难以置信的标记!

你可能会说这不重要,因为其中一些只是重复的、无效的,甚至是为了移到反馈中心而关闭的,没关系。但我们甚至没有提到我们的内部问题跟踪器,我们已经又关闭了 500 多个问题:😁

仅在 5 月我们就修复了 60 个报告的漏洞:

这是一个特殊的指标,表明你的所有建议和想法都被阅读并给予了应有的关注,并且所有漏洞都被修复了!感谢大家为此做出的贡献,特别是 @Voltaism 和 @Ayanokoji,他们真正做了敲猴子工作并找到了最不易察觉的漏洞! 😂

提示

你可以在我们的 Discord 更新日志频道中找到所有漏洞修复的无尽列表:

新反馈页面​

最近,我们推出了一个新的反馈页面来收集想法和建议。之前我们在 GitHub 的问题跟踪器上做这件事,但现在我们有一个专门用于想法的平台,现在 GitHub 不再仅用于漏洞。

这个新平台由 Canny 提供支持,你可以在其中添加新建议并为其他建议投票。欢迎登录并为最好的想法投票!了解某个功能是否真的需要对我们来说非常有用,这样我们就可以给予正确的优先级!

它还提供了一个路线图标签页,将所有已接受/计划和进行中的想法分组!旧的 Trello 板将不再使用。

来看看吧! 👉 https://nanos-world.com/feedback/ideas

P2P 服务器​

一件根本上重要的事情是能够从菜单启动游戏与朋友一起玩,而无需担心专用服务器或路由器端口转发之类的事情。

现在,得益于新的 P2P 服务器选项,这成为可能!这允许你以 P2P 模式打开服务器,通过 Steam 中继服务器中继所有流量,并在服务器和客户端之间建立连接,安全地确保双方都不知道彼此的 IP 等! 🤯

为了实现这一点,我们必须重新实现我们的文件传输系统(在连接到服务器时),该系统为此目的使用了 HTTP 连接,现在它可以使用内置连接系统来传输它们! (HTTP 传输仍然比使用内部套接字快,尽管在 P2P 连接上这是唯一可能的方法)。

备注

通过 HTTP 传输文件仍然比 P2P 快。我们也正在努力改善这一性能!

当服务器以 P2P 模式打开时,所有传输都重定向为使用内置传输系统。另一方面,以专用服务器方式打开服务器将像今天一样使用:小文件通过内置传输系统,大文件通过 HTTP。

最后,我们正在引入两种新的服务器“类型”:专用服务器 和 P2P,这只是你可以在 Config.toml 中设置的配置,或作为参数 --dedicated_server 0/1 来启用或禁用它。通过菜单启动服务器将默认以 P2P 方式启动,除非在高级标签页中明确设置。

启动 P2P 服务器时,Steam 中继服务器将生成一个新的临时随机“虚拟”IP 地址,供其他人用来连接到你的服务器。无需转发路由器端口!

由于连接是通过 Steam 中继服务器建立的,即使连接到本地主机,所有流量也将通过你计算机最近的 Steam 服务器,这意味着即使在本地主机上,你的 ping 也不会为零。如果你想测试或独自游玩,我们建议将其作为专用服务器启动。

新的同步插值​

自 UE 5.0 以来,在与客户端同步位置/旋转时,一些插值开始变得奇怪/闪烁。为了修复和改进这一点,我们成功地将我们所有的网络集成到了虚幻引擎内置的物理复制系统中!

该系统通过由网络快照数据包供给并自动处理所有插值、外推、不同步和高 ping 来工作! 😎 它大大提高了物理同步的质量!

目前,所有物理实体(道具、武器、近战、手榴弹和载具)都使用这个新系统进行模拟。其他实体(或非模拟物理)仍在使用标准的插值方法,这完全没问题并且适合。

我们仍在考虑将角色纳入新系统。由于它们使用单独的移动系统,因此需要不同的方法和特别关注。 😉

新的游戏内控制台​

我们扩展了游戏内控制台以提供新的原始可视化。由于虚幻引擎控件不能提供更好的方法来同时拥有彩色文本和选择它们的能力,我们决定添加一个新标签页将控制台转换为原始文本,你可以自由地将它们复制到剪贴板:

我们还添加了一个直接打开日志文件的按钮! 😉

值得注意的变化​

网络调试统计信息​

除了世界中的网络调试绘制之外,我们还包含了一个新的屏幕调试工具,在屏幕上显示网络统计信息,如果你在设置 -> 调试中启用绘制网络调试,它将显示。

轮廓​

现在你也可以通过在其上使用 :SetOutlineEnabled() 在 Actor 中启用轮廓效果!它的工作方式类似于 :SetHighlightEnabled,你也可以自定义其颜色和厚度!

我们也将沙盒物理枪效果替换为此了!

动画设置​

我们开始为设置实体上的动画参数实现新接口,它现在支持一个新参数 play_rate,你可以直接在实体的 :SetAnimation...() 中定义。

备注

目前这个新接口仅适用于武器。很快它将来到所有实体!

声音设置​

与动画设置相同,但也适用于声音!现在你可以为其定义每个实体每个资产的通用声音设置,它支持 volume 和 pitch 参数:

备注

目前这个新接口仅适用于武器。很快它将来到所有实体!

内部控制绑定​

通过我们模块化和移除一些内部依赖(主要与动画和动画蓝图相关)的努力,我们开始创建一些控制绑定来取代我们旧的过程动画方法(之前它们被硬编码在动画蓝图中,现在它们被分成几个控制绑定),这也提供了更好的性能和模块化!

我们已经创建并正在使用用于驾驶和瞄准的控制绑定,为武器瞄准和驾驶车轮提供过程动画。

沙盒改进​

沙盒游戏模式也获得了一些改进,例如工具的新图标:

还改进了物理枪和缩放器的线性缩放以获得更好的操控性,重做了使用工具附着实体的系统(之前由于 ping 导致附着位置漏洞,现在考虑了客户端相对位置),当然我们还进行了几个漏洞修复!

我们还收到了来自 Voltaism 的 PR,它添加了通过上下文菜单重生和冻结时间的选项。

新文档教程​

自定义武器换弹动画​

我们创建了一个新的教程页面,用于添加自定义武器换弹动画。这得益于我们不断使游戏模块化的努力。换弹动画很特殊,因为它们在执行期间触发游戏操作,需要在动画蒙太奇内部进行配置!

结语​

通过实现 P2P 服务器,我们成功地使与朋友一起游玩和测试变得极其容易!现在每个人都可以立即启动服务器并与朋友一起玩,无需端口转发等! 🥳

此外,随着新的路线图与建议的引入,我们更加朝着反馈驱动的方向前进,所以请把你所有的想法放在那里,并为你喜欢的投票!我们真的认为这是采取下一步的关键!

啊,值得一提的是我们有一条热门推文 😁!如果你还没有关注我们,请现在关注!

Foo

感谢又一个月的支持,爱你们! 💝

4 月:搭载虚幻引擎 5!

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

虚幻引擎 5 现在是 nanos world 的官方引擎!

虚幻引擎 5​

我们非常激动地宣布,虚幻引擎 5 现在是 nanos world 的默认引擎!!!​

这是一个密集的更新、改进和漏洞修复的月份,以达到 nanos world 一个合理稳定的版本。我们非常感谢帮助测试稳定性、资产迁移和查找漏洞的测试者!

值得一提的是,尽管 UE5“稳定版”已由 Epic 正式发布,但仍有一些漏洞和改进需要完成,在本博客末尾我们将列出我们已在 UE5 上发现并等待官方修复的所有已知漏洞。

通过此版本,我们的目标是在 nanos world 上拥有与之前相同的体验和稳定性。从现在起,我们将在即将到来的更新中引入越来越多的虚幻引擎 5 功能,确保它们具有适当的稳定性和集成度。

令人惊叹的新 UE5 功能​

以下是一些值得注意的新虚幻引擎 5 功能,它们对 nanos world 资产创作者非常有用!

新 UI​

虚幻引擎 5 为用户界面的外观、感觉和效率带来了一系列改进,为所有用户创造了现代化的、改进的工作流程。

这对模组制作者和资产创作者来说是一个更好、更令人愉悦的工作流程!

几何工具​

借助 UE5 内置的建模和网格体编辑工具,创建网格体和地图变得更加容易!

Quixel Bridge​

虚幻引擎的 Quixel Bridge 插件让你可以在虚幻引擎编辑器中全面访问 Megascans 库。你可以浏览集合、搜索特定资产,并轻松将资产添加到你的虚幻引擎项目中。

它随 UE5 内置!只需拖放即可获得资产!

提示

我们正在积极寻找改进 Quixel Bridge 到 nanos world 流程的方法。

混沌破坏​

混沌破坏系统是一组工具,可用于实时实现电影级质量的破坏效果。

我们已经成功将其初始版本与 nanos world 集成,你可以将任何几何集合作为 StaticMesh 生成,快来看看吧!

提示

我们正在积极努力进一步改进与混沌破坏实体的集成!

Lumen​

Lumen 是虚幻引擎 5 全新的全动态全局光照和反射系统。

它提供了软件计算的光线追踪方法!这是一种实现全局光照的新的非常高效的技术,但它仍然有性能开销。在我们的测试中,Epic 质量的 Lumen 使 FPS 下降了 50%,中等质量下降了 25%。你可以在游戏设置中启用/禁用它。

Lumen 还为兼容的 GPU 提供了硬件光线追踪方法,这也是现在游戏设置中的一个选项 ;)

DirectX 12​

现在 nanos world 默认使用 DX12 作为 RHI。 Nanite、Lumen 和虚拟阴影贴图等一些新功能在 DX12 中比在 DX11 中运行得更高效。

你可以在游戏设置中在 DX11 <-> DX12 之间切换。*使用硬件光线追踪需要 DX12。

更多内容​

你可以在官方 UE5 路线图以及官方 UE5 发行说明中查看所有新功能的列表。

值得一提的是其他令人惊叹的功能,如 MetaHumans、Nanite 和运行时重定向。这些(以及许多其他功能)仍将进行测试,以在 nanos world 上获得积极支持!

重做的水体物理​

本月我们还设法稍微调整了我们的水体物理设置。我们使用集成到 nanos world 中的虚幻引擎水体系统,它使用浮筒系统使物体产生浮力。道具、可拾取物和载具在游戏中会自动生成浮筒,从那时起计算其大小和力的算法相当原始。

经过数小时的测试和进行了一些极其困难的数学计算,我们成功实现了一种新的程序化算法,该算法根据物体的大小和质量在物体上动态生成浮筒。例如,这使得矩形物体能够正确反应(之前我们只有一个球形浮筒,导致物体在水中不断奇怪地旋转)。

这种新算法解决了某些道具被弹出并在水面上无限踢动的问题,并且还使它们的漂浮能力正常化。目前它们的漂浮方式都相同,我们仍打算通过允许通过脚本和引擎设置自定义浮筒来改进它,并且还打算使用物理材质来根据材质改变浮力。

新的默认地图​

我们正在为 nanos world 提供两张新的默认地图:OceanMap 和 BlankMap。第一个包含一个小岛和广阔的海洋(适合测试水体相关功能),第二个则完全是空的、全黑的,适合通过动态脚本创建的地图!

我们还调整了 BlankMap 的大小及其表面纹理,使其具有现代感和 UE5 的外观。

nanos world 迁移​

正如我们在上次博客中所述,我们正在迁移到新的商店页面,UE5 上的新 nanos world 版本将已经出现在这个新的游戏条目上,旧条目将完全停用。

游戏​

所有当前测试者将收到一个新的 Steam 密钥,以便在你的 Steam 账户中激活 nanos world。以下是获取新 nanos world 游戏密钥的方法:

  1. 首先将新游戏条目加入愿望单 😁
  1. 可选:至少启动一次旧游戏以存储你的成就,以便在启动新游戏时自动导入它们(这是一个内置工具,可自动导出和导入你的统计信息)。
  2. 可选:备份你的 Server/ 文件夹(如果你正在开发包/资产)。
  3. 可选:卸载旧游戏,虽然不是强制性的,但建议这样做,因为如果不卸载可能会出现一些问题,因为两款游戏使用相同的文件夹名称。
  4. 你将在认证网站收到新的 Steam 密钥。如果你没有收到,请联系我们。
注意

所有旧游戏密钥将被吊销。你将在 Steam 上收到一条警告,提示“Beta 测试已结束”。

Assets​

从虚幻引擎导出资产的流程没有改变,所有旧教程仍然有效,但有些仍在使用旧的 UE4 界面,我们正在不断更新文档以更新图片并为该工作流程添加更多信息。

我们已经更新了导入自定义资产以及资产开发套件页面。有一个新的工作流程已更新用于导出资产,所以现在你不需要打包项目,只需烘焙资产即可——但旧方法仍然有效,只是新方法更简单。

资产开发套件 GitHub 项目也已更新,唯一改变的是以下文件:

  • Config/DefaultEngine.ini
  • NanosWorldADK.uproject

你可以拉取到你当前下载的 ADK 项目中,或者直接用新文件替换你的项目。如果遇到问题,请尝试删除项目中的以下文件夹,以便获得一个干净的项目(不含旧的编译内容):

  • Binaries/
  • Saved/
  • Intermediate/
备注

所有资产都需要在虚幻引擎 5 中重新烘焙,才能与新的 nanos world 版本兼容。这是必要的,因为引擎更改时,着色器代码或序列化二进制文件会不时发生变化,因此我们需要保持相同的版本,否则游戏可能会在期望加载较新版本时崩溃,而文件却是旧的。

我们已经成功更新了官方资产包。

新测试者​

我们非常抱歉让最近注册成为测试者的玩家等待了这么久,由于我们正在迁移到新的游戏条目,我们不想再给出旧密钥了,但现在我们正在恢复测试邀请!

提示

我们仍致力于只邀请模组制作者和脚本编写者,如果你只是玩家,请关注未来的公开游戏测试环节!

已知漏洞​

有些漏洞是已知的,并列在下面,其中大部分我们无能为力,很可能是 UE5 的内部漏洞,我正在向 Epic 报告所有这些漏洞,祈祷他们接受报告并修复它。

  • 缆绳渲染有时不工作(Epic 已接受我的报告)。
  • 气球/缆绳方形约束(Epic 已接受我的报告并已在 5.1 中修复)。
  • 碰撞事件/声音不总是触发(报告尚未被接受)。
  • SceneCapture 不再反射(报告尚未被接受)。
  • 混沌物理有时会在物体静止一小段时间后冻结物体,我在 nanos world 上做了一些变通方法在某些情况下修复它(当抓取或掉落道具时)。

结语​

nanos world 在 UE5 上的这次发布代表了我们将最前沿技术始终带入游戏的努力。开发一个具有质量、效率和模块化的平台是我们的主要支柱。通过正确的方式,这些更新和新功能变得易于集成或制作 😁。

我们希望成为虚幻引擎(5)沙盒游戏的标杆,我们正朝着这个方向前进!

我们非常感谢迄今为止支持我们的每一个人!每一个点赞、反应、表情或评论都让我们更加开心!谢谢!

3 月:Steam、数据库与蓝图!

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

全新的 Steam 商店页面、性能优化、数据库与蓝图集成!

Steam 商店页面​

最近我们的商店页面遇到了一些问题,这迫使我们重新制作一个全新的页面。现在我们终于重新发布了它!它拥有了新的截图、视频以及更好的描述!

请立即加入愿望单!!!​

整个情况的一个不利之处是,旧商店和旧游戏条目将被停用。很快每个人都将收到一个新的 Steam 密钥,用于在你的库中激活新的 nanos world!

此外,我们嵌入了一个工具,用于将你的成就和统计信息从旧游戏导出(然后导入)到新游戏。你只需在启动新游戏之前启动一次旧游戏,一切都会自动导入!

性能优化​

众所周知,nanos world 的一大优点就是性能和优化。而在上个月,我们在改进框架的一些内部关键点方面取得了重大进展。

内存​

首先要提到的是,我们生成的实体在内存占用方面取得了巨大的改进。

在内部,我们使用一个特殊的系统来处理通过网络发送和同步数据。我们的方法是采用一个类似于虚幻引擎复制系统的系统。但在此之前,该系统是每个生成实体内存占用的大部分原因。

考虑到这一点,我们致力于解决这个问题,更不用说这些内存占用中的大部分在所有实体中都是不必要地重复的。幸运的是,我们成功地将实体的内存占用减少了高达 90%。现在它只占用其存在所严格需要的数据!

我们做了一个小测试来比较,通过脚本生成 10,000 个角色,查看内存占用的差异:

之前:

之后:

部分实体内存占用前后对比:

Entity之前的内存占用之后的内存占用减少量
Cable5.4 KB1.1 KB80%
Character13.1 KB1.8 KB86%
Light4.8 KB1.0 KB79%
Melee7.1 KB1.5 KB79%
粒子4.6 KB1.0 KB78%
Player3.1 KB0.3 KB90%
Prop4.8 KB1.0 KB79%
StaticMesh4.5 KB1.0 KB78%
TextRender5.3 KB1.1 KB79%
Trigger4.0 KB0.8 KB80%
Vehicle7.9 KB2.0 KB75%
Weapon11.1 KB2.0 KB82%
备注

此占用是在服务器端计算的。在客户端,这些数值会稍大一些,更不用说同时加载的资产了。

这仅仅是通过改进一个单一系统实现的,我们甚至还没有开始研究主动压缩技术或减小一些不必要地大于其需求的变量大小。 🙏

网络​

另一项重大优化是在我们的网络数据包方面,通过网络发送的每个数据都有一个通用的“标头”来标识某些操作。这是网络的一个恒定“成本”,我们成功将其大小减少了高达 75%,使得所有通过网络发送的数据静态地降低!

客户端​

我们开始推进客户端的游戏优化。这通常比服务器端更棘手,因为它涉及处理虚幻引擎子系统。但我们成功基于所选的质量设置添加了一些优化。例如,对于血液或弹孔粒子,现在根据距离和所选的效​​果质量,它们将减少生成或完全不生成。

我们还调整了载具系统,使用该系统进行类似的优化。我们还有很多可以改进的地方! 😀

新类:Blueprint​

一个非常被需要的类正在被引入:Blueprint!现在可以在 nanos world 中生成任何蓝图 Actor!

我们成功实现了方法:CallBlueprintEvent(),你可以在蓝图中创建任何带有任意数量参数的事件或函数,并从脚本中调用它!这扩展了许多可能性!

此外,你可以在服务器上生成它,它将遵循与任何其他 Actor 实体相同的规则,并且也会使用网络主控系统与其他玩家同步!

新类:Database​

对于某些游戏模式(如角色扮演)来说,极其基础的东西就是数据库。在此之前,我们提供了一个 MySQL 模块作为第三方 Lua 库使用,但由于其与服务器集成的复杂性,以及无法进行异步查询,我们深入研究了一个更健壮的解决方案。

为此,我们推出了新类:Database。一个用于连接数据库的一体化解决方案,开箱即用地支持 MySQL、PostgreSQL 和 SQLite!更不用说异步和线程安全的查询了!

查看其页面以获取完整的文档和示例!

载具轮胎打滑痕迹​

我们为载具做的一个小而酷的补充是,在打滑时添加轮胎痕迹:

此外,还添加了一个很棒的细节:车轮会被鲜血涂抹!

它是 100% 动态且程序化的!

沙盒改进​

我们在沙盒游戏模式方面获得了多项改进!第一个是沙盒“API”:我们列出了它导出的所有函数和事件,以便你可以集成自己的实体/工具或使用其功能。

我们还对菜单、类别和标签进行了模块化,你可以从外部包中添加自己的!

在 GitHub 页面查看沙盒 API:https://github.com/nanos-world/nanos-world-sandbox。

最后,我们改进了物理枪工具,现在你可以使用鼠标控制它,并且还具有“吸附到网格”的移动功能!

沙盒中还进行了其他几项调整和漏洞修复。

新的粒子方法​

我们扩展了粒子的可能性!现在可以在其上设置材质参数,还可以使用任何纹理、WebUI 和画布作为参数!

例如,你可以生成一个画布,在其上绘制并用作材质粒子参数!

以下视频展示了使用 WebUI https://nanos-world.com 作为材质参数放入粒子中!在运行时渲染!

显著改进​

音乐并发​

我们终于成功修复了音乐问题,该问题导致当生成太多声音时,类型为音乐的声音会停止。

客户端道具​

道具现在也可以在客户端生成!这允许在客户端生成“非网络化”的动态网格体,旨在用作视觉效果和非游戏功能。

我们已经更新了沙盒的可破坏实体,使其使用客户端碎片!

关卡静态网格体​

现在,地图中的所有 StaticMeshActor 都会在客户端自动加载为 StaticMesh 实体!可以在客户端对它们进行绘制、破坏、移动以及任何其他操作!

异步纹理加载​

我们改进了客户端加载系统,现在纹理(例如 .jpg)是异步加载的,并且纹理以延迟方式应用。该系统目前在 SetMaterialTextureParameter() 下实现用于测试,很快我们也可以在其他方法中使用它。

异步文件加载​

除上述之外,我们还扩展了异步实现到 File 类中,现在它有了 :ReadAsync() 方法!

新的光照方法​

我们添加了一堆缺失的光照设置器和获取器方法,以及使用 SetVisibility() 切换其开/关的能力。

Assets.toml 更改​

Asset.toml 获得了一个新类别:unreal,我们必须在其中指定一个新设置 unreal_version(此资产包编译所用的虚幻引擎版本),这将是一个重要的功能,以防止旧资产版本导致游戏崩溃。

它还获得了新的 blueprints 类别,用于列出蓝图 😉。

载具碰撞​

我们调整并改进了我们的碰撞配置,现在载具在与其他物体(包括网络化角色、道具和其他载具)碰撞时交互更好。

之前其他网络化角色在与载具碰撞时会失去同步(它们开始飞行,当物体撞到载具车轮时会发生奇怪的事情),而且两辆载具之间的碰撞极其僵硬,这也已被修复,现在将更加自然。

太阳改进​

默认太阳光和阴影已得到改进,特别是在日出/日落期间,我们曾有一些伪影和阴影消失的问题,现在它应该更平滑、更漂亮(并且希望更高效)。

结语​

感谢又一个月的支持!蓝图和数据库类取得了令人难以置信的进展,并且最终再次整理了我们的 Steam 页面!

我们的方向是继续推进性能和内存优化,并为 nanos world 带来重要的新功能!

我们还面临一些重要挑战,即为实体引入基于距离的剔除和维度系统,这对于创建特殊环境至关重要。

我们还想实现一些重要的类,例如自定义角色(例如用于动物)和其他类型的载具(空中、海上)。

最后,我们对虚幻引擎 5 的发布(昨天 4 月 5 日)感到非常兴奋,因为它带来了 nanos world 中重要问题的几个解决方案(例如运行时重定向,它承诺解决几个动画兼容性问题)以及大量可使用的新功能!我们很快™就会有好消息带给你!

下个月见! 🥳

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 游戏模式:

1 月:商店与资源库!

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

隆重介绍商店、全新类以及所有追溯更新!

本篇博客还将总结自去年 11 月上一篇博客发布以来所开发的所有亮点内容!详细的更新日志可在我们的 Discord 中查看!敬请关注!

隆重介绍:商店与资源库!​

我们非常高兴地向大家宣布,期待已久的商店终于上线了!商店是一个市场,每个人都可以在这里上传资产、包、发布新版本、创建团队等等! 100% 与资源库和命令行工具无缝集成!

提示

商店的开发工作由 @MegaThorx 主导!这是初始版本,后续还会迎来多次更新!欢迎提出任何宝贵意见!

功能亮点​

  • 可创建资产包与包页面,支持添加图片和描述。

  • 支持上传新版本,并能够将其标记为草稿、测试版或稳定版。

  • 创建团队并添加团队成员。

  • 标签与分类系统。

提示

在此处查看完整文档。

nanos world 商店现已上线:https://store.nanos-world.com/

服务器令牌​

随着商店的增加,我们推出了全新功能:服务器令牌。

在使用 CLI 从商店下载任何内容时(以及即将推出™的其他集成功能中),必须使用此令牌。你需要将其设置在 Config.toml 文件的 token 配置项中。

有关如何生成令牌,请参阅 https://store.nanos-world.com/settings/tokens/。

新类:Canvas​

我们添加了一个全新的类来完全替代原有的 Render 静态类:Canvas! Canvas 就像一个画框,你可以在上面绘制任何东西,从线条、方块到材质与纹理!

你还可以将其用作 UI,或者通过 :SetMaterialFromCanvas() 使用 Canvas 绘制任何物体!

现在创建基础 UI 变得简单得多!

-- 生成一个 Canvas
local canvas = Canvas(true, Color.TRANSPARENT, 0, true)

-- 订阅 Update 事件,我们只能在该事件内部进行绘制
canvas:Subscribe("Update", function(self, width, height)
-- 在屏幕中央绘制文本
self:DrawText("Hello World!", Vector2D(width / 2, height / 2))

-- 绘制一条水平红色直线
self:DrawLine(Vector2D(0, height / 2), Vector2D(width, height / 2), 10, Color.RED)
end)

基本 HUD(画布)教程也已同步更新!

Steam 输入 + 控制器​

我们已成功集成了 Steam 输入。如果你还不了解,Steam 输入可以让你使用任何控制器进行设置与游戏,并且能直接通过 Steam 界面对其进行配置。

这是一个出色的集成,因为这种相对简洁的实现方式不仅让 nanos world 支持使用控制器游玩,还为用户提供了自定义按键绑定并与社区分享的可能性。

初始版本已在最新更新中发布,更多按键绑定与配置将在后续推出。

全新内置按键图示​

我们添加了一个工具方法,用于根据指定的按键获取对应的图示/图片。只需使用 Input.GetKeyIcon(key_name),它就会返回图片路径,既可用作纹理,也可作为常规图片标签 <img> 嵌入 HTML 中!

你可以将其与 Input.GetMappedKey() 结合使用,从而根据用户的按键绑定配置动态获取对应的按键图示。

弹道轨迹改进​

我们对默认的子弹轨迹粒子进行了重做。此前,在特定视角下,你可能会看到巨大球体飞过,天空也会出现多处异常。经过重做后,弹道看起来更加写实,且没有任何瑕疵!

全新地图配置​

现在可以为每张地图单独创建配置文件,在其中定义所有兼容的游戏模式、出生点位置以及添加自定义数据!

此外,还可以配置一个完整的包,使其在该地图加载时自动加载。

Map.toml
# 地图配置
[map]
# 兼容的游戏模式
compatible_game_modes = [
"sandbox",
"deathmatch"
]

# 出生点列表
spawn_points = [
{ location = "Vector(100, 200, 100)", rotation = "Rotator(0, 90, 0)" },
{ location = "Vector(200, 300, 100)", rotation = "Rotator(0, 90, 0)" },
]

[custom_data]
whatever = "anything"

查看完整文档请前往地图脚本与数据。

提示

以下更新改动源自之前的 1.1.0-1.3.0 版本,在此我们将重点介绍其中的亮点部分!

交互式 CLI​

CLI 中新增了一项非常出色的实用功能:通过交互方式创建资产包与包。

只需使用 add [package|assets] NAME 命令,就能以交互方式创建资产包或包,同时还会自动生成对应的配置和默认文件!

Actor 标签​

应测试者的要求,我们实现了访问虚幻 Actor 标签的接口。借助 Actor.SetActorTag() 和 Actor.GetActorTag(),你可以直接在脚本端(客户端)设置或获取虚幻 Actor 标签。

Actor 标签本质上是一个字符串数组,可以在任何地方访问,包括虚幻蓝图。这一微小的改进大大拓展了与蓝图及外部实现集成的可能性。

新类:SceneCapture​

这是在 1.1.0 更新中推出的一个非常酷炫的特性。

SceneCapture 是一种相机 Actor,可实时捕获周围环境,我们能够通过 :SetMaterialFromSceneCapture() 将捕获结果渲染应用到任何其他 Actor 上!

它包含多项可配置的性能微调选项:当你没有看向目标 Actor 时能够提高渲染效率,而在距离较远时则会自动降低捕获帧率!

资产缓存​

我们实现了一项出色的功能,可在运行时(重新)加载资产时大幅提升性能并减少卡顿现象。卡顿通常发生在机械硬盘(HDD)以及从磁盘读取文件时。现在,所有已加载的资产(包括磁盘文件,如 .ogg 和 .jpg)都会被自动缓存,再次加载时会直接复用。我们仍计划添加一些选项,以便在进入服务器时自动预加载所有已加载资产包中的资产;此外还将提供可通过脚本调用的异步加载选项,以便在实际使用前预加载资产,从而进一步缓解卡顿,为脚本开发者提供更多自由度。

光源描述文件​

我们为光源添加了一项很酷的新属性:光源描述文件,允许通过 Light:SetTextureLightProfile() 修改光源的光源描述文件纹理。

你可以将其设置为我们内置的光源描述文件之一。所有内置光源描述文件均导入自 IES 光源描述文件包。

例如,这可以为你的灯光添加逼真的闪光灯效果。

载具改进​

现在可以手动控制载具引擎的启动状态,也可以使用 Vehicle:SetAutoStartEngine() 控制驾驶员上车时是否自动启动引擎。

同时我们还添加了一个小细节:尾灯,制动时亮红色,倒车时亮白色,可以通过 Vehicle:SetTaillightsSetup() 进行自定义配置:

备注

目前载具网格体颜色尚未与前大灯及尾灯完全同步,我们将在接下来的更新中对此进行改进!

降落伞自定义​

我们为内置降落伞新增了一项实用的自定义项,现在可以通过 Character:SetParachuteTexture(texture) 修改其纹理。此外,所有内置纹理均位于 nanos-world/NanosWorld/Content/NanosWorld/Textures/Parachute/,可使用如 assets://nanos-world/Textures/Parachute 形式直接引用。

社区焦点​

我们的社区一直在用心打造许多令人惊艳的作品,在此想与大家分享!

T-Drones​

作者:Timmy

Timmy 制作了一个非常酷且功能完善的无人机包,快来看看吧!完全集成了全新的 SceneCapture,构建出“3D 相机系统”。此外,无人机还具备一键返航功能!太棒了!

T-Drones 是一款旨在模拟航拍无人机行为的脚本,设计初衷是使其能够在绝大多数游戏模式中运行。

它的构造非常注重模块化,能够轻松适应任何想要进行修改或功能扩展的需求。

KOTOR RP​

作者:ERO Team (NegativeName, Mougel, False 与 Tark)

ERO 团队正在全力开发一款极其精彩的星球大战角色扮演模式(KOTOR RP),这绝对会超级震撼!这里展示了一些世界截图以及光剑的连击系统!

Star Wars KOTOR RP 是一个基于星球大战宇宙的法语角色扮演游戏模式。

你将在那个遥远的银河系中扮演一名角色。你的身份完全由你自己决定。你是加入西斯帝国去奴役银河系,还是加入银河共和国誓死守护它,抑或是保持中立不偏不倚。

选择权在你手中!成为一名绝地武士、西斯、士兵、佣兵,抑或只是普通商人。

T-Bomber​

作者:Timmy

此外 Timmy 还在制作一款炸弹人游戏模式!非常棒的作品,我已经迫不及待想玩玩了!

T-Bomber 是一款类炸弹人游戏模式,灵感极大程度地来源于著名的迷宫游戏。

其宗旨是在复刻原版炸弹人体验的同时加入更多新趣味,并展示 nanos world 脚本开发的丰富可能性。

规则非常简单:活到最后的人获胜!

VZombies​

作者:Voltaism

Voltaism 正在开发基于《使命召唤》体验的僵尸游戏模式。过程既充满乐趣又令人惊悚!

这是一个近乎完工的游戏模式,基本上复刻了经典的《使命召唤:僵尸》模式,你需要尽可能长久地抵御僵尸生存下去!

该游戏模式还支持人机陪你一同战斗。

nanos BattleField 2043​

作者:LighterChu, Trevor 与 MemeFrug

《战地风雨 2042》发售时,我们寄予了厚望。至于我们为什么制作 nanos battlefield 2043——它不仅仅是《战地风云 2042》,而是把历代战地作品融合在未来的集大成之作。

结语​

再次感谢大家的反馈与支持,每一个建议和发现的漏洞都在推动 nanos world 的飞轮越转越快!

备注

本篇博客汇总展示了我们在过去一个月中取得的各项亮点进展。请注意,数不胜数的改进、漏洞修复及其他新功能,均可在我们的 Discord 更新日志和游戏内查看。

我们十分关注大家最关心的诉求,并希望尽快加以实现,使 nanos world API 愈加完善。我们的路线图依然很长,重大核心目标包括引入全新类型的载具(包括空中与海上)、自定义角色(支持任意骨骼)、直接蓝图支持等等!

眼下我们计划重新设计 Steam 商店页面。此前由于一些技术原因该页面被暂时搁置,现在我们希望使其重焕生机;同时,我们也打算对 nanos world 进行品牌重塑——我们深知,符合游戏主题的徽标与精美宣发图对于 Steam 平台的自我营销及吸引新玩家至关重要!

下期再见!谢谢!