跳至正文

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

查看所有标签

1 月:虚幻引擎 5.5 与增强输入!

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

虚幻引擎 5.5 与增强输入系统!

欢迎阅读我们过去几个月的最新更新汇总!

虚幻引擎 5.5​

虽然感觉我们昨天才刚过渡到 5.4,但我们决定应该直接升级到 5.5,而不是再等几个月等 5.6 发布。所以我们已经开始为过渡到虚幻引擎 5.5 做准备,并且已经为这次更新做好了充分准备!

然而,经过多次测试后,我们决定推迟到热修复补丁 5.5.2 发布后再进行更新。当前版本(5.5.1)存在一些已知问题,特别是在打包和用户生成内容方面,Epic 已在他们的漏洞追踪器中着手解决。

一旦他们发布这个热修复补丁,我们就会推进更新,并留出更多时间与大家一起进行广泛测试!

增强输入系统​

我们终于实现了虚幻全新的增强输入系统!

输入按键绑定设置经过重构以支持虚幻的增强输入系统

这需要对所有游戏玩法类(角色、载具、武器和菜单交互)进行重大的内部重构,这将重置所有当前配置。

此更新发布后,请务必重新查看你的按键绑定设置,并根据自己的偏好进行调整!

脚本更改​

如果你之前绑定的是原生按键绑定,你将需要更新你的脚本。使用新的增强输入系统后,每个按键绑定现在被分离为不同的名称。

之前我们是这样注册的:

Client/Input.lua
Input.Bind("MoveForward", InputEvent.Pressed, function(delta)
-- 之前它返回的 delta 从 -1.0(向后)到 1.0(向前)
Console.Log("MoveForward: ", delta)
end)

现在每个输入返回的 delta 从 0.0 到 1.0,仅表示按下的程度,我们需要为每个按键绑定单独进行 Bind。

这样,MoveForward(W)仅用于向前移动,MoveBackward(S)仅用于向后移动:

Client/Input.lua
Input.Bind("MoveForward", InputEvent.Pressed, function(delta)
-- 现在它返回的 delta 从 0.0 到 1.0
Console.Log("MoveForward: ", delta)
end)

Input.Bind("MoveBackward", InputEvent.Pressed, function(delta)
-- 现在它返回的 delta 从 0.0 到 1.0
Console.Log("MoveBackward: ", delta)
end)
提示

你可以在按键绑定设置中悬停在原生绑定上,找到确切的绑定名称:

按键绑定设置悬停时显示按键绑定名称

主菜单最新博客​

我们更新了主菜单,直接显示最新博客新闻。这个新的可点击区域会将你重定向到我们新闻博客中的对应文章!

主菜单博客新闻显示最新博客文章

文档改进​

我们更新了文档的多个方面。以下是一些改进:

  • 已更新到最新的 Docusaurus 版本。
  • 设置虚幻引擎页面已修订并更新。移除了一些依赖项,并更新了 SDK 版本。
  • 修复了若干拼写错误和小漏洞。
  • API 生成器获得了多项改进、调整和体验优化。
  • 现在视频将以静音方式自动播放。
  • 基类弹窗现在会显示其所有子类,以便更清晰地查看:

基类弹窗显示子类

断开连接弹窗​

我们新增了重试按钮,当你与服务器断开连接时,可以快速重新连接:

带有重试按钮的断开连接弹窗

缓存文件位置​

日志、缓存图像、缓存包和其他临时文件现在存储在 AppData 目录中,而不是游戏安装目录中。

此更改解决了非管理员用户受限目录的问题,并将所有可丢弃文件集中管理,便于维护。

我们还更新了维护菜单,以指向正确的新路径。

维护菜单

更新的依赖项​

我们更新了内部依赖项以确保稳定性和性能:

  • CEF 已更新至版本 131。
  • SteamSDK 已更新至版本 1.61

启用的插件​

应大家的要求,我们已启用以下插件供你的用户生成内容使用:PoseSearch、AnimationWarping、MotionWarping 和 Chooser。

大量漏洞修复​

感谢大家的反馈,我们也修复了若干漏洞,列举如下:

  • 修复了 Linux 服务器上的随机崩溃。
  • 修复了成就显示不正确的问题。
  • 修复了 CharacterSimple 不同步可附加物或可涂装数据的问题。
  • 修复了 UI 音频设置未正确应用的问题。
  • 修复了一些游戏崩溃问题。
  • 修复了与高亮相关的致命错误。
  • 修复了 .ogg 音效无法播放的问题。
  • 修复了设置了 auto_play 的音效在加载时无法播放的问题。
  • 以及更多。

一旦我们推送更新,你就能在我们的更新日志中阅读所有更改。

结语​

大家好,这是今年的第一篇新闻博客,我真心希望你们享受了假期,并祝大家 2025 年一切顺利!

这篇新闻博客是我们迈出正确第一步的开端,这里描述的更新只是众多好消息的开始!我已经在准备很棒的新功能,让 nanos world 成为有史以来最好的沙盒游戏!

感谢你参与我们的旅程,我迫不及待想尽快与你分享更多激动人心的更新!

10 月:虚幻引擎 5.4 与加载!

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

虚幻引擎 5.4 与加载!

欢迎阅读我们过去几个月的最新更新汇总!

虚幻引擎 5.4​

我们很高兴地宣布升级到虚幻引擎 5.4!此更新带来了众多生活质量改进,提升了我们的开发体验。如需详细了解,请查看完整的虚幻引擎 5.4 更新日志此处。

加载改进​

我们显著增强了加载屏幕子系统:

更快的地图加载​

进入包含大型关卡的服务器现在快得多!我们优化了加载阶段,该阶段之前重复执行了一些工作,并且还引入了常用资产的预加载,减少了游戏过程中的卡顿。

重连逻辑​

已实现一个新系统,在文件下载失败时重新尝试连接。此外,如果服务器在加载屏幕期间重新加载包,客户端也会重新连接,解决了脚本不同步的问题。

资产校验异步​

我们的本地资产校验器进行了重大改造,利用了多核处理器的优势。现在所有资产文件在所有核心线程之间分配并并行处理,大大提高了资产包的加载时间。

在我们的内部测试中,一个包含 ±130,000 个文件(±50 GB)的资产包,在 i9 第 14 代处理器上,我们看到了令人难以置信的改进:

备注

以下时间旨在与同一处理器/资产包中的其他时间进行比较,提供改进幅度的概念,而非绝对时间。

之前,在冷读¹中首次加载此资产包需要将近 4 分 15 秒才能完成。现在只需 ±35 秒。

在热读²中,之前需要 ±75 秒,现在只需 ±7 秒。

结合我们的内部缓存系统,读取此资产包(在我们缓存之后),之前需要 ±10 秒,现在只需不到 ±4 秒。

在多核处理器上首次读取资产包时,我们获得了近 10 倍的速度提升,在缓存后读取时获得了近 2 倍的提升。

加载之前之后速度变化
完全冷读4 分 15 秒35 秒快 7 倍
完全热读1 分 15 秒7 秒快 10 倍
已缓存10 秒4 秒快 2.5 倍

¹ 冷读:自操作系统启动以来,处理器之前未读取过这些文件。
² 热读:在此操作系统启动期间,处理器已读取过这些文件,现已被操作系统缓存,从而提高了后续读取速度。

备注

结果因处理器规格和线程数而异。

测试地图水体​

测试地图海洋回来了!

我们解决了阻止水体出现的问题,让你可以再次潜入水中。 🌊

网络主控调试​

我们通过添加附近实体的 ID 和类名增强了世界网络调试,使调试更加容易。

Events.UnsubscribeRemote​

我们引入了一个新方法 Events.UnsubscribeRemote() 来退订远程事件。

这样,Events.Unsubscribe() 的使用现在仅限于本地事件,与 Events.Subscribe() 和 Events.SubscribRemote() 方法名称保持一致。

请确保将你的包的 compatibility_version 更新到 1.65.0 才能使用此新功能。

64 位哈希​

所有内部哈希操作已升级到 64 位,显著降低了处理来自巨大资产包的数十万资产时发生哈希冲突的可能性。

Console.Error 和 Warn 堆栈​

现在使用 Console.Warn() 或 Console.Error() 时,控制台将输出脚本调用的堆栈跟踪,使识别警告和错误的来源更加容易:

testing/Server/Index.lua
function MyError()
Console.Error("来自脚本的错误")
end

MyError()

新的抗锯齿设置​

我们在设置中添加了新的抗锯齿选项。你现在可以选择禁用它,或使用虚幻引擎原生的时间抗锯齿(TAA)、FXAA 或时间超分辨率(TSR):

更新的依赖项​

我们继续更新内部依赖项,以始终获得最新的漏洞修复和安全补丁:

  • CEF:版本 130。
  • DLSS:最新版本 3.7.20。
  • Lua:最新版本 5.4.7。
  • Ultra Dynamic Sky:最新版本 8.4(如果你在地图上使用它,请确保也更新你的版本,以免地图崩溃)。
  • 各种其他内部库(例如 zip、toml、openssl 等)。

结语​

大家好!自上次新闻博客以来,我们有一些重要且需要的更新,但我知道最近进展有点慢。一些个人因素促成了这一点,但我想向你们保证,开发仍在向前推进,远未停止。我一直在寻找新想法,并有一些令人兴奋的计划,为 nanos world 带来更多更新和改进!

我非常非常感谢你们在这段时间的耐心和支持。我对未来感到兴奋,迫不及待地想尽快与你们分享更多更新!感谢你们成为我们社区如此出色的一部分!

2 月:DLSS 与静态光照!

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

DLSS 与静态光照

来看看 2 月最新更新的汇总吧!

DLSS​

我们终于成功在 nanos world 中集成了最新的 NVIDIA DLSS 3.5!这为游戏带来了巨大的性能提升(对 RTX 用户而言)!

信息

深度学习超采样(DLSS)是一项 NVIDIA RTX 技术,利用 RTX GPU 上的深度学习神经网络和 Tensor Core 来提供更快的帧率、更好的图像质量和出色的响应速度。它为游戏提供性能余量,以最大化画质设置并提高输出分辨率,同时增强高负载光线追踪内容的图像质量。

DLSS 设置可以通过菜单中新的视频设置区域进行配置:

DLSS 视频设置区域

DLSS 超分辨率​

信息

DLSS 超分辨率利用 AI 通过渲染更少的像素并重建高分辨率帧来提升帧率。此功能适用于所有 RTX GPU。

下面你可以看到启用 DLSS SR 设置前后的对比:

DLSS SR 关闭

DLSS SR 质量预设

DLSS SR 性能预设

我们注意到使用性能预设时 FPS 提升了 50%,使用质量预设时提升了 15%!而最终画面没有明显可见的视觉质量下降!只需切换一个设置 🤯!

DLSS 帧生成​

信息

DLSS 帧生成利用 AI 通过生成额外的高质量帧来提升帧率,同时通过 NVIDIA Reflex 优化响应速度。 DLSS 帧生成在 GeForce RTX 40 系列 GPU 上使用新的光流加速器和 NVIDIA Tensor Core。 DLSS 帧生成需要 GeForce RTX 40 系列 GPU 以及 Reflex SDK 集成。

我们还集成了 DLSS 的帧生成技术。不幸的是,这只适用于 RTX 40 系列,但对能用上它的人来说是一件很棒的事!

更多内容即将到来​

未来我们将在游戏中实现更多 DLSS 集成,例如光线重建和 Reflex,这些只是开始和测试集成!

此外,我们将在未来的更新中考虑集成 AMD 的 FidelityFX 超分辨率插件,让 AMD 用户也能满意 😉。

静态光照​

nanos world 现在支持在你的地图上使用静态光照!

城市地铁列车模块化地图(烘焙静态光照,300 FPS)

好消息:经过一些测试,它没有破坏与之前烘焙的资产和地图的兼容性!

糟糕的网络与同步漏洞​

我们终于找到并修复了一个困扰我们数年的可怕漏洞,它非常罕见,但一旦发生,整个游戏就会变得混乱且不一致。

这个问题是客户端始终以不可靠模式发送所有网络数据包。这导致一些网络数据包丢失或被丢弃,甚至以错误顺序到达。这完全破坏了服务器的同步和一致性,因为我们需要确保它们按顺序到达(并且确实到达)。

这个问题很难调试,因为它主要发生在极端情况下,例如连接不良或网络线路完全拥堵时。

这个漏洞的一个不明显后果是大量“安全调用方法警告”(在此问题中报告),也正是通过它我们才设法复现并找到这个漏洞!

许多其他奇怪的漏洞、同步问题和一致性问题也很可能随着此修复一并解决 🙏。

杂项​

我们还添加了一些其他小功能。

控制台密码​

我们新增了一个服务器控制台命令:password,允许在运行时轻松更改密码!

Esc 菜单在打开时新增了效果,之前它会降低音调和音量,对游戏声音造成了一些奇怪(且搞笑)的效果。但现在我们为它实现了合适的低通滤波器,使其在游戏过程中打开时效果更好:

带有低通滤波器的 Esc 菜单

结语​

过去几个月我们遇到了一些挫折,现在才写这篇新闻博客!很多事情正在发生,但没有什么被落下,恰恰相反:我们正努力做出强有力的转变,以继续我们一直以来的繁重工作!

感谢你们一直以来的支持,你们的能量和欢呼对我们继续开发和打造这款梦想中的游戏至关重要!

我们正在为 nanos world 计划更多好消息!即将推出™!下次见!非常感谢!

11 月:TOML 类与密码流程!

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

新的 TOML 类与密码工作流

来看看 11 月最新更新的汇总吧!

新类:TOML​

我们正在引入一个新类:TOML。

这是一个新的工具类,旨在帮助操作 TOML 文件和结构。

它提供了对 TOML 内容进行序列化和反序列化的方法,使其能够轻松转换为 Lua 结构。

密码流程​

我们重做了带密码服务器的运作方式。

之前我们在得知服务器是否设有密码之前就发送密码,这并不好,因为某些情况下无法工作,例如跟随好友连接到设有密码的服务器,由于没有弹出密码提示,导致连接总是失败。

但通过这项新改动,客户端将始终等待服务器告知是否需要密码。从而使今后每一种连接流程都能在设有密码的服务器上正常工作。

现在,每当你尝试连接到设有密码的服务器时,都会弹出密码提示框要求输入密码,然后再继续连接!

特殊节日主题​

我们已将游戏 UI 的主题自动化,现在当圣诞节或万圣节临近时,主菜单 UI 会自动切换为相应的主题!

有了这项改进,为其他节日添加新主题也变得更加容易!时机成熟时我们会陆续添加!

File 类访问​

我们为 File 类实现了一套新的内部访问系统,改变了脚本访问文件系统中文件的方式。

现在在客户端,允许读取 Packages/ 文件夹中的任何文件,但写入仍然只允许在默认的 .transient/ 文件夹中进行。

这扩展了客户端文件访问的权限,因为在此之前只允许在 .transient/ 文件夹内访问。

服务器端规则保持不变:可以读写服务器目录内的任何文件(Config.toml 本身除外)。

游戏内服务器​

我们对游戏内服务器做了多项改进,现在更换地图或重启服务器不会再导致服务器关闭(此前主机会断开连接再重新连接)。

这些改动需要在内部进行大量重构,但现在一切问题都已修复,并按预期正常工作!

杂项​

以下是一些较小的改动和改进:

Input.Unbind​

我们为 Input.Unbind() 添加了一个新参数:callback,现在可以解绑特定的函数了(就像 Events.Unsubscribe 的工作方式一样)。

Player 方法​

我们为 Player 添加了两个新方法:SetCameraFOV() 和 SetCameraSpeedSettings(),它们允许在未附身 Character 时自定义浮动 Pawn 的 FOV 和速度!

启用 PCG 插件​

我们在基础游戏中启用了 PCG 插件,现在你可以在你的地图中使用虚幻引擎 5 的新 PCG 特性了!

多项漏洞修复​

这个月我们还修复了大量漏洞,你可以在我们的 Discord 更新日志频道中详细阅读。但简要列举几项:

  • Canvas 总是显示为黑色
  • 客户端上的 Trigger 无法工作
  • Level Streaming 导致游戏崩溃
  • 重启包时 Database 和 File 锁定连接与文件,导致需要重启服务器
  • 服务器未将 Server 的同步值发送给新连接的玩家
  • Package.toml 未正确生成
  • 以及更多……

结语​

尽管篇幅更加简洁,我还是不想跳过撰写这篇博客新闻!我们获得了一些很酷的新增内容,比如 TOML 辅助类和其他改进,还有一堆重要的漏洞修复!

我想感谢大家今年对我们发展历程的支持以及给予的所有帮助!明年我们将有大量消息,我们非常期待与大家分享!

由于圣诞节和新年假期,我不确定我们是否会发布 12 月的博客。

明年见!祝我们所有人圣诞快乐、新年快乐!!!

10 月: C 模块包与 UE 5.3!

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

C 模块包与虚幻引擎 5.3 更新!

来看看 10 月最新更新的汇总吧!

新包类型:C 模块​

我们正在引入一种新的包类型:C 模块!

在上次的博客新闻中,我谈到了我正在对模块和 DLL 加载系统进行的重构,到目前为止,我们有一个 Modules/ 根文件夹,可以加载 .dll 和 .so 预编译二进制文件供 Lua 执行,因为它们随后可以通过 Package.Require() 加载。

在那篇博客中,我谈到了一项改进,使二进制库不再由 Lua 的 require() 加载,而是由我自己的加载系统加载,从而允许使用 Package.Require() 来加载它们(改进了加载这些自定义库时的沙盒化和安全性)。

现在我们有了一个完全专用的包类型,因此不再需要显式使用 Package.Require 来加载 DLL,我们现在只需加载模块的包,该包将配置 DLL 列表,并在包加载时自动加载。

此外,还可以将这些模块包上传到资源库,实现一切整合!

在专门的 C 模块页面查看更多信息:

C 模块包core-concepts/packages/c-module

虚幻引擎 5.3​

我们终于将 nanos world 的虚幻引擎版本更新到了最新的 5.3!我们也已经用上了最新的热修复版本 5.3.2。

这个版本总体上带来了许多改进,但我们仍在解决一些与原生地图相关的问题,这些地图在某些视频设置下无法正常工作。

杂项​

以下是本月所做的次要功能改进的摘要:

GetAllValuesKeys​

现在所有实体、静态 Server 和 Client 类都有一个新方法 GetAllValuesKeys,它返回一个包含所有值集合键的列表

重启与切换地图事件​

Server 获得了两个新事件:Restart 和 ChangeMap,它们分别在服务器重启和地图更改(通过控制台或脚本)时触发。

备注

请注意,当地图更改时,服务器也会重启,从而同时触发这两个事件。

改进的 Table.Dump​

我对我们的 Table.Dump 做了一些改进,现在它会生成 Lua 兼容的格式,可以轻松复制粘贴到代码中。示例:

Lua Code
Console.Log(NanosTable.Dump(Server.GetMaps()))
Output
{
[1] = {
["author"] = "nanos™",
["compatible_game_modes"] = {
[1] = "sandbox",
},
["key"] = "nanos-world::BlankMap",
},
[2] = {
["author"] = "nanos™",
["compatible_game_modes"] = {},
["key"] = "nanos-world::EmptyMap",
},
[3] = {
["author"] = "nanos™",
["compatible_game_modes"] = {
[1] = "sandbox",
},
["key"] = "nanos-world::OceanMap",
},
[4] = {
["author"] = "nanos™",
["compatible_game_modes"] = {
[1] = "sandbox",
},
["key"] = "nanos-world::TestingMap",
}
}

Zip 清理​

现在从资源库下载的资产包中所有已下载的 .zip 文件都会自动删除,释放大量磁盘空间!(这早就该做了 😜)。

备注

请注意,资产 .download/ 文件夹中现有的 .zip 文件仍会保留,你需要手动清理或使用维护标签页进行清理。

万圣节活动​

上个月我们举办了万圣节活动,其中我们推出了万圣节主题的游戏模式,并通过 Steam 的 Playtest 系统让整个 Steam 社区都能游玩这款游戏。

今年 Steam 的做法相当不同,不再推广带有万圣节活动的游戏,而只推广万圣节(恐怖)游戏本身,不幸的是这没有像去年那样很好地推广 nanos world。

但我们要感谢所有参与为 nanos world 创建新游戏模式的人,这些新游戏模式始终是我们资源库的绝佳补充!

我们将用特殊标签和徽章在资源库中突出显示万圣节创建的内容!

结语​

上个月我们没有发布新闻博客(这是自开始以来的第一次),但现在我们恢复了常规!

本月我想为我们的模块系统提供一个最终的解决方案,现在它更加稳固,可以更广泛地使用,并更好地与其余核心系统集成!

虚幻引擎 5.3 更新也是我们一直耐心等待迈出的一大步,因为我们没有更新到虚幻引擎 5.2,我们已经将近一年没有更新虚幻引擎版本了。保持更新到最新版本总是好的!

所有其他杂项改进都是得益于你们的建议和漏洞报告!再次感谢你们继续这样做并支持 nanos world!

下个月见!