跳至正文

10 月:Jam 获胜者、游乐场、团队招募!

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

公布万圣节 Game Jam 获胜者、全新游乐场、新沙盒工具与实体、改进的服务器浏览器、团队招募、更完善的 Lua 保护措施以及更多内容!

10 月新闻

欢迎阅读我们上个月最新更新的汇总!

🎃 万圣节 Game Jam 获胜者!​

我们的万圣节游戏测试周末已经结束了!参赛作品非常精彩,竞争也十分激烈。感谢所有参与、托管服务器、提交游戏模式、投票以及在这个有趣的周末加入我们的人! 💙

2026 年万圣节 Game Jam

总冠军!​

Death in the Box 获得 4.69 分(满分 5 分),我们很荣幸地宣布它是 2026 年万圣节 Game Jam 的总冠军!恭喜 TimeTales 团队赢得本次 Game Jam!

总排名​

2026 年万圣节 Game Jam 结果

同时恭喜 CosmoSnail 和 Synlight 分别获得第二名和第三名!

类别获胜者​

同样恭喜各个类别的所有获胜者!获胜者是根据各个类别中的最高分选出的!

所有前三名以及参与徽章已发放至团队成员账户!再次感谢所有参与者,以及我们一起度过的美好时光! 💙

提示

请注意,排名由社区投票决定,分类获胜者则根据各分类中最高的贝叶斯平均分选出,以确保对参赛作品进行公平、均衡的评估。

2026 年万圣节 Game Jam 结果https://nanos-world.com/game-jams/halloween-2026/results-2026

游戏测试周末​

这个周末 nanos world 向所有人开放,以下是一些活动截图!

2026 年万圣节游戏测试截图

游戏测试访问权限延长​

我们将游戏测试周末延长至 11 月 8 日星期日,你仍然可以加入 nanos world,体验各种游戏模式和我们全新的游乐场,并在**反馈中心**提供反馈。

备注

请注意,周日之后,只有测试者以及被社区加入白名单的玩家才能继续游玩 nanos world。如果你还没有访问权限,请通过我们的测试者表单注册成为测试者!

全新游乐场!​

隆重介绍……我们的全新 游乐场 地图! 🎉

一个大型开放沙盒,可以探索实体、物理、工具和彩蛋,专为随意玩耍和尝试 nanos world 的各种可能性而打造!

全新游乐场地图

地图设有工具试用区、射击场、运动球类、蹦床、相机、交互道具等。它使用了沙盒中的实体,因此你在那里找到的东西也可以在你自己的创作中生成和使用。

枢纽、沙盒与物理、射击场、实体、博物馆和运动区域

游乐场已在资源库和我们官方的枢纽服务器上线!别忘了去试一试并留下评价!

资源库上的游乐场https://nanos-world.com/store/packages/default-playground-map

作为包的默认测试地图​

随着全新游乐场地图的推出,我们旧的 default-testing-map 即将退役。它是我们为测试 nanos world 功能而创建的第一张地图,多年来被用于大量测试和演示。

我们已将其移至资源库,以便公开展示。

资源库上的默认测试地图https://nanos-world.com/store/packages/default-testing-map

游戏测试成就​

我们已将 Steam 成就和统计信息集成到 Playtest 版本中,现在你在游玩游戏测试时也能获得成就并追踪统计信息!

游戏测试版本中的成就

沙盒迎来新玩具!​

这个月沙盒新增了大量内容,首先是物理枪、工具枪和呕吐枪的全新模型!

全新的工具枪、物理枪和呕吐枪

新增了门、球、椅子、台灯、动画标靶以及带播放列表和同步音乐的点唱机。按钮新增了更多模型、音效和动画,并且可以通过伤害激活。

我们还新增了材质枪,可以更改物体的材质,颜色枪现在也支持选择材质槽位!

电视现在已同步,闭路电视有了新的摄像头模型,相框新增了边框选项。

新的沙盒实体

新增默认资产​

动物与骨架​

default-characters 包新增了人类骨架和一系列动物!鸡、牛、羊、猪、鳄鱼、大象、狮子、狼、乌鸦等,均可在沙盒 NPC 标签页或角色选择菜单中找到。

default-characters 包中的新动物和人类骨架

渔船水上载具​

我们在默认载具包中新增了一艘渔船,并改进了水上载具!

它们现在以半推力倒车,自动浮力浮筒放置更好,并且只有当所有浮筒完全浸没时才会阻止油门。我们修复了当网格体或重心偏移时船只倾斜漂浮或船尾下沉的问题,并且相机不再因为波浪的上下起伏而重新对齐。

全新的渔船
信息

VehicleWater:SetThrustStrength() 现在使用牛顿作为单位,默认值为 3000。

新爆能枪​

默认武器包新增了爆能手枪、爆能步枪和 HFG 网格体,替换了旧的爆能枪和 DC-15S 资产。

全新的爆能手枪、爆能步枪和 HFG

表面材质​

我们新增了一系列默认表面材质:木材、砖块、混凝土、石材、大理石、砾石、泥土、屋顶瓦片、金属、壁纸、塑料、橡胶、霓虹等!

它们使用了全新的 Triplanar 模板材质,可以将纹理投射到物体上,而不依赖其 UV。纹理在物体移动或旋转时会跟随物体,并在物体缩放时保持相同大小。

你可以用新的材质枪试用它们,或直接在脚本中使用。

默认表面材质assets-modding/default-asset-pack/default-materials

物理、音频与同步改进​

休眠物体可以休息​

我们发现静止的物理物体在每个物理步骤中仍然会产生 Hit 事件。现在这些静止接触会被过滤,浮力仅在刚体处于唤醒状态时更新,休眠的武器也会停止每帧更新其骨骼物理。

我们还修复了已加载资产绕过虚幻引擎缓存并再次走加载路径的问题。

这应该能降低 CPU 占用,并改善拥有大量物理对象(如武器或道具)的客户端性能。

运行时音频重写​

从包文件加载的运行时声音(.ogg)现在由引擎实时解码,而不是在加载时完全解码到内存中。一段三分钟的 Ogg 音频以前解码后大约占用 70 MB,现在改为在内存中保留压缩文件数据,从而降低了游戏的整体内存占用。

循环、跳转以及多次播放同一声音现在都使用引擎的原生音频系统。我们还修复了使用相同资产的声音之间声音衰减泄漏的问题,改进了脚步声和其他短音效的范围,并修复了播放过多声音时音乐丢失优先级的问题。

如果你在加载声音时发现任何问题或卡顿,请告诉我们!

更精确的同步​

我们提高了网络传输中的旋转精度,修复了在其他玩家身上看到的阶梯式瞄准旋转(尤其是在旁观时)。通过远程事件发送的旋转也从中受益。

实验性的基于同步系统获得了更多修复:站在附加到同步实体的客户端网格体上的角色,现在对其他玩家而言能正确跟随该实体。我们还修复了角色从移动物体上脱离后滑回的问题,以及在移动平台上跳跃时的不同步问题。

其他改进包括修复当网格体隐藏或在屏幕外时布娃娃抖动的问题,以及低帧率下输入(如开火)丢失的问题。

UI 改进​

服务器浏览器与筛选​

改进后的服务器浏览器,支持排序和筛选

这个月服务器浏览器得到了大量改进!它现在会优先列出兼容的服务器,其次是低延迟和玩家最多的服务器,并且可以按 Ping 和玩家数排序。搜索也会匹配游戏模式和地图,返回主菜单时会保留筛选器,玩家工具提示会显示有多少玩家正在连接。

我们还修复了列表有时刷新后显示 0 个服务器的问题:Steam 对我们的请求进行了限流,所以现在完整列表最多每 30 秒请求一次,期间只查询已知服务器。

Esc 菜单​

Esc 菜单也获得了重大改进!

按住 Esc 现在始终会打开原生 Esc 菜单,即使脚本拦截了 Esc 按键以显示自己的菜单。

玩家个人资料​

Esc 菜单个人资料

现在可以从游戏内玩家列表打开玩家个人资料,显示其团队和徽章,以及你自己的账户、成就和统计信息。加入好友也可以在那里使用。

资源库地图与游戏模式页面​

Esc 菜单资源库地图与游戏模式页面

现在你可以在 Esc 菜单中点击当前服务器的地图和游戏模式,打开它们的资源库页面,查看描述、评价和截图,并直接在那里评分和评价!

Game Jam 标签页​

Esc 菜单 Game Jam 标签页

在 Game Jam 期间,Esc 菜单新增了 Game Jam 标签页,列出所有参赛作品及其服务器,让你无需离开游戏即可在不同游戏模式之间切换并投票。

改进的评价小部件​

改进后的评价小部件

资源库资源和 Game Jam 参赛作品的游戏内评价和评分小部件经过重新设计,与网站保持一致,让你可以更快速地为你玩过的内容评分和评价。

其他 UI 改进​

其他一些更改:

  • 新闻气球中新增 Steam 分支选择器,可在 bleeding-edge 版本和默认版本之间切换。
  • 启动错误弹窗现在会解释 Steam 启动失败的原因:Steam 未运行、客户端过旧,或缺少游戏或游戏测试访问权限。
  • 新增设置项,可禁用初始加载视频和键入声音。
  • 清除所有缓存现在会显示释放了多少空间。
  • 硬件基准测试现在会根据你的硬件和结果自动选择超分、延迟降低和硬件光线追踪。
  • 载具工具提示现在会显示你将作为驾驶员还是乘客进入。

网站与社区​

隆重介绍……团队招募!​

社区招募页面,包含开放职位和筛选

团队现在可以在全新的 招募 页面发布开放职位!

每个职位可以列出你所需的技能、报酬、预算、投入时间、语言和联系方式,并可选择关联到你的某个项目。人们可以搜索和筛选列表,找到适合自己的职位。

职位也会显示在团队和项目页面上,枢纽会展示新职位。团队可以从管理页面编辑、续期、关闭或重新开放职位,项目现在也有自己的招募管理标签页。

备注

招募是一个目录:人们通过职位中的联系方式取得联系。任何协议、工作或薪金均由相关方直接处理。 nanos world 不对任何协议或纠纷负责。

寻找团队或发布职位https://nanos-world.com/community/recruiting

资源与项目统计​

资源统计仪表板,包含每日图表和周期对比

资源和项目现在在其管理页面上有统计图表,显示每日浏览量、下载量(如适用)和收藏量。统计卡片还会显示与上一周期的对比。

团队邀请​

团队邀请

将某人添加到团队现在会发送邀请。对方可以接受或拒绝,未决的邀请会以通知形式显示在其账户页面上。我们还新增了离开团队按钮。

全新崩溃查询​

全新的崩溃查询页面

崩溃报告器现在会链接到全新 崩溃查询 页面上的你的报告。它会显示可能的原因,包括内存不足错误和损坏的资产。它可以帮助你判断崩溃是来自损坏或故障的资产,还是应该向我们报告的游戏崩溃!

崩溃查询https://nanos-world.com/crash

全新导航栏菜单​

网站还新增了导航栏菜单,包含全新的帮助标签页,将支持、反馈、崩溃查询、文档、服务器状态和故障排除整合在一起。

全新的帮助菜单

内容准则​

我们新增了一个专门的 内容准则 页面,包含关于你可以发布的内容、名称、他人作品、AI 生成内容、安全代码和举报的建议与说明。

如果你正在准备资源、团队或项目页面,请在发布前阅读一下!

其他网站改进​

个人资料、团队、项目、资源和 Game Jam 参赛作品的编辑现在使用统一的保存流程。截图可以通过拖放重新排序,我们还修复了在图片仍在处理时上传或重新排列图片导致的错误。

资源的版本标签页现在以 Markdown 渲染更新日志,具有共享的“显示更多信息”切换开关,并允许你隐藏旧的已删除或已拒绝版本。资源还可以从其管理页面的危险区重命名。

附加到反馈、漏洞和支持讨论中的图片现在会在图库中打开,你可以用箭头、按键或滑动浏览,评价会显示最后编辑时间。

脚本改进​

Steam 好友邀请​

我们新增了 Steam.OpenInviteDialog() 和 Steam.InviteFriend(),用于邀请好友加入你当前的服务器!

在加入玩家一侧,Steam.GetJoinedFromFriend() 会返回通过其邀请使该玩家加入的好友的 SteamID。如果他们接受了对已所在服务器的邀请,则会触发 FriendJoin 事件,而不是重新连接。

Client/Index.lua
Input.Register("InviteFriends", "F7", "Invite Steam friends to the server")

Input.Bind("InviteFriends", InputEvent.Pressed, function()
Steam.OpenInviteDialog()
end)

包加载与卸载事件​

Server 和 Client 现在拥有 PackageLoad 和 PackageUnload 事件,因此你可以在其他包加载或卸载时做出响应。

Server/Index.lua
Server.Subscribe("PackageLoad", function(package_name)
Console.Log("已加载包:" .. package_name)
end)

我们还修复了 Server.LoadPackage() 未将新加载的包发送给已连接玩家的问题。

全新相对移动​

新增的 Actor:TranslateRelativeTo() 和 Actor:RotateRelativeTo() 可以平滑地相对于父级移动或旋转附加的 Actor,同时继续跟随父级的移动。

全新重置速度​

我们还新增了 Actor:ResetVelocity(),用于清除线速度和角速度。在 Pawn 上,它还会清除移动速度,这在传送角色时非常有用,可以避免携带旧的动量。

自由麦​

语音聊天现在除了按键说话外,还新增了自由麦模式,可在音频设置中选择。在自由麦模式下,语音键会切换麦克风的静音状态,Esc 菜单会显示麦克风是开启还是静音(你也可以在那里静音/取消静音)。

脚本可以通过 Client.IsVOIPSelfMuted() 读取该状态,并监听 VOIPSelfMuteChange 来更新自己的语音指示器。

全新语音音量归一化​

我们还新增了一套音频处理系统,尝试将每个人的麦克风音量归一化到一致的范围内。

此外,麦克风测试现在在主菜单中也可以使用了!

请告诉我们你的声音现在听起来怎么样!

Lua 沙盒化​

玩家会加入他们无法完全信任的服务器,因此我们加强了在其机器上运行服务器脚本的 Lua 环境:

  • debug 库现在已被禁用,但 debug.traceback、debug.getinfo、debug.sethook 和 debug.gethook 除外,因为其他函数允许脚本读取和更改其他脚本的内部结构。
  • 现在禁止加载预编译的 Lua 字节码,无论是通过 load 还是作为包文件。只能加载文本块。
  • 篡改类表的脚本不再能使一种实体类型被读取为另一种类型。

为了帮助调试你自己的脚本,可以在客户端通过新的设置 > 调试选项启用完整的 debug 库。该设置不会被保存,因此只在你关闭游戏前有效。请仅在你信任的服务器上使用!

包加载与 Lua 环境core-concepts/packages/package-loading-and-lua-environment

其他安全改进​

  • 客户端 Lua 文件现在使用仅发送给已认证玩家的密钥进行加密,因此无法再从缓存文件夹读取,也无法在不加入服务器的情况下从服务器下载。
  • 多个网络消息现在在读取和处理之前会经过严格校验。
提示

我们仍在努力改进 Lua 沙盒化和安全性,并将在未来更新中继续增加更多保护措施。如果你发现绕过方法或任何漏洞,请通过 支持 页面私下向我们报告,而不要公开分享,以便我们修复!

其他脚本改进​

依赖项更新​

  • 将 CEF 更新至 v154。
  • 将 NVIDIA DLSS 更新至 v8.8.0。
  • 将 AMD FSR 更新至 v4.1.1,AMD Anti-Lag 更新至 v2.0.5。
  • 将 Sentry 更新至 v1.24.0,Discord SDK 更新至 v1.10.19337。
  • 将 SOCI 更新至 v4.1.4,libpq 更新至 v17.11,xxHash 更新至 v0.8.4,mimalloc 更新至 v3.5.1。

文档​

疑难解答指南 已扩充,增加了更多关于已知问题的信息和帮助。我们还更新了 VOIP 指南和商店指南。

结语​

10 月是硕果累累的一个月,带来了大量新功能、改进和修复。这个月的新闻博客内容非常多,我甚至可能忘记介绍其中一些功能! 😅

举办公开游戏测试总是一件令人愉快的事,看到许多新玩家加入并测试我们一直在做的东西。

我之前提到过,制作新的游戏模式和地图让我非常开心,因为这让我以不同的视角看待游戏,而且我总能找到改进它的新方法。但看到社区创作自己的内容并与我们分享,则更加有意义。希望你喜欢探索新地图、尝试新的游戏模式和工具!

特别感谢所有花时间提交 Game Jam 作品、帮助托管服务器,或利用周末测试并报告问题的人!

同样感谢所有通过 Ko-fi 支持开发,以及通过 Crowdin 贡献翻译的人。你们的支持帮助我继续全职开发 nanos world。 💙

继续在 Discord 和 反馈中心 与我们分享你的创作和反馈吧!

下一次更新再见! 🚀

Ko-fiKo-fi

9 月:开放游戏测试、项目、中心与反馈!

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

万圣节 Game Jam 投稿已开放,即将到来的开放游戏测试,隆重推出项目、全新中心与全局搜索、全新个人资料、支持与反馈页面、角色射击模式、WebUI 渲染重写以及更多内容!

欢迎阅读我们上个月最新更新的汇总!

🎃 万圣节 Game Jam 正在进行中!​

2026 年万圣节 Game Jam 已正式开启,作品投稿现已开放! 👇

2026 年万圣节 Game Jam 页面

我们已经收到了若干份投稿,现在加入还有充足的时间!以下是日期:

  • 投稿与开发时间: 截止至 10 月 23 日。
  • 公开游戏测试与投票: 从 10 月 30 日 到 11 月 1 日,面向 Steam 上的所有人开放。
  • 结果: 将在游戏测试结束后不久公布。

要加入,请前往 Game Jam 页面,单击 加入 jam 并创建你的参赛作品。你可以以个人开发者身份或与你的团队一起提交一个游戏模式,为其添加截图和视频,并注册一个服务器以便在活动期间托管它。

这将是我们迄今为止规模最大的游戏测试,将有成千上万的玩家参与!这是展示你的作品、让 nanos world 出现在大众面前的最佳时机! 🙏

2026 万圣节 Game Jamhttps://nanos-world.com/game-jams/halloween-2026
提示

每位参与者和投票者都将获得一枚 2026 年万圣节 Game Jam 徽章,获胜者还将获得特别徽章! 🏆

隆重介绍……项目!​

本月网站最大的新增功能:项目!

全新项目页面

项目是展示你的团队正在构建或运营的内容的页面:一个服务器、一个社区、一个工具或任何其他创作。它向人们展示这是什么、进展如何以及在哪里可以找到它,并允许你链接它所使用的商店资源。

现在每个团队都可以创建项目并向世界展示,拥有自己的页面、描述、截图、视频、链接和语言。

项目页面

每个项目都会显示其开发状态(概念、开发中、Alpha、Beta 或已发布)以及已开发时长,并拥有自己的收藏数,以便人们表达对它的支持。

你的项目正在招人吗?将其标记为招募中,其他开发者就能通过项目页面上的筛选器找到它!

快去创建你自己的项目,向世界展示你正在做什么吧!

社区项目https://nanos-world.com/community/projects

专属于你项目的 Key​

此外,项目现在是为你的玩家或开发者申请 Key 的地方。如果你的项目是一个服务器,你可以通过新的支持页面为其申请 Key,我们会将所有 Key 集中发送给你。

全新的项目申请 Key 区域

网站与社区​

9 月对社区来说是重要的一个月,网站带来了大量改动和新功能!

枢纽​

全新的 枢纽 现在是 nanos world 上一切动态的聚集地:当前活动、整体统计信息以及本周商店和社区的热门内容,全部汇集在一个页面中。

全新的枢纽

你可以看到热门资源、受欢迎的包和项目、顶尖创作者、最近更新的资源以及新发布的项目或团队。

nanos world 中心https://nanos-world.com/hub

我们还在导航栏中添加了全局搜索,因此你可以在网站的任何位置搜索任何项目、资源、团队或用户!

全新的全局搜索

全新导航栏​

导航栏经过重新设计,拥有更丰富的下拉菜单,让你更快到达每个页面:

全新的导航栏下拉菜单

全新悬停卡片​

现在,将光标悬停在网站上任何项目、资源、团队、用户或徽章上都会显示带有其详细信息的悬停卡片,因此你无需打开页面就能查看某人是谁:

悬停卡片

全新个人资料与团队页面​

个人资料和团队页面经过重新设计,新增了标签页,显示你的资源、项目、你参与的 Game Jam 以及你撰写的评价,还有一个包含你统计信息的活动面板(给出的收藏、撰写的评价、发布的想法和报告的漏洞)。

全新的用户个人资料页面

全新的团队资料页面

现在你可以向你的个人资料和团队添加链接。链接会自动匹配到常见网站(Discord、GitHub、YouTube、X、Twitch、Ko-fi 等)并显示其图标。快去你的个人资料或团队页面添加你的链接吧!

AI 生成内容筛选器​

由于低质量 AI 生成内容越来越普遍,且社区要求提供一种识别和筛选它们的方式,我们为资源和项目添加了新的 AI 生成标签,你可以在浏览商店或项目页面时将其筛选掉。

AI 生成警告标签
备注

AI 生成标签由我们的审核团队应用。如果你的任何资源或项目被错误地标记为 AI 生成,你可以通过支持页面提出申诉。

提示

此外,如果你发现任何低质量 AI 生成但未被标记的资源或项目,请通过其页面上的举报按钮进行举报。

资源管理​

资源现在可以拥有语言、链接和视频,最多 20 张截图,以及最多 2.5 万字符的描述,让创作者能够展示其创作的更多细节和背景!

可添加的全新资源详情

发布清单和可见性设置已合并:资源或项目只有在完成清单后才能发布。我们还让清单更具交互性,显示进度并允许你点击每个项目直接跳转到可完成它的页面。

发布资源清单

此外,资源(和团队)管理页面新增了历史记录标签页,显示对其所做的每一次更改的审计记录。

改进的收藏与评分​

评分模态窗口经过重新设计,更具交互性和趣味性,激励用户对资源进行评分。你可以给出 1 到 5 星评分,你的评价和平均评分会显示在资源页面上。

资源评分
提示

你可以在任何资源的评测标签页中对其进行评分!

我们还为评分、收藏或创建团队、资源或项目时添加了一些粒子效果。你应该试试! 😉

资源收藏

新反馈页面​

我们刚刚推出了一个全新的 反馈 页面,你可以在那里看到社区报告的所有想法和漏洞,为它们投票并发表评论。你也可以提交自己的想法或报告漏洞,并跟踪它们的状态。

来自 FeatureOS、Canny 和 GitHub 的所有内容都已导入,因此你以前的帖子和投票仍然在那里!

全新的反馈中心
提示

通过创建漏洞/想法帖子或为其投票,你将在个人资料中获得特殊的投票者和反馈者徽章!你发布的想法和漏洞数量也会显示在你的个人资料中!

新的反馈页面还有一个顶尖贡献者排名,列出提交想法和漏洞最多、以及投票最多的用户!

感谢你帮助我们确定下一步工作的优先级!我们会阅读每一条帖子和评论,并尽可能多回复。

反馈页面https://nanos-world.com/feedback

路线图与更新日志​

路线图 与 更新日志 也已从文档移至主网站:

全新的路线图和更新日志页面

我们还用最近发布的功能更新了路线图!

路线图https://nanos-world.com/roadmap 更新日志https://nanos-world.com/changelog

入门​

刚接触 nanos world?全新的 入门 页面将引导你完成最初的步骤:申请成为测试者、加入社区并开始创作。我们还添加了新的常见问题。

入门页面
入门与常见问题https://nanos-world.com/getting-started

支持​

我们推出了全新的 支持 区域,你可以在那里开启一个话题直接与我们交流:账户问题、为你的项目申请 Key、安全报告等等。

为你的项目玩家申请 Key 现在也通过支持页面完成,我们需要的信息都集中在一个地方。

支持https://nanos-world.com/support

举报与审核​

我们重新设计了举报系统:你现在可以在网站上举报资源、项目、团队、用户、评价、讨论和 Game Jam 参赛作品,还可以直接在游戏内的资源库中举报资源和评价。

举报模态窗口

通知与生日​

  • 新增电子邮件通知设置:在你的账户设置中,你可以选择希望接收哪些电子邮件(反馈、支持、评分等)。
  • 你现在可以将你的生日添加到个人资料中,并启用一项设置,让我们的 Discord 机器人在你的生日当天送上祝福并赋予你一个特殊身份组! 🎂(告别有 Bug 的 Mee6)
  • 新的评价、团队和资源现在会发布到我们的 Discord 活动频道。
  • 新增自动徽章:赞赏者(收藏资源或项目)、投票者和反馈者,并且 创作者 现在也会授予项目创作者。

其他改进​

  • 改进了登录,并为新账户添加了欢迎消息。
  • 改进了网站的加载性能和速度。
  • 修复了若干移动端布局问题,包括项目页面。
  • 其他若干 UI、布局和漏洞修复。

Steam 应用参数​

警告

服务器所有者请注意: 游戏服务器现在默认在 Playtest Steam 应用中启动。要为主要的“game”应用运行你的服务器,请使用新的 --steam_app "game" 参数启动它。旧的 --playtest 参数已被弃用,取而代之的是 --steam_app "playtest"。

玩家只能加入与他们正在游玩的相同 Steam 应用运行的服务器,因此请确保你的服务器使用的是正确的应用!

服务器配置core-concepts/server-manual/server-configuration

WebUI 渲染重写​

WebUI (CEF) 加速绘制已使用新的共享纹理方法重写,修复了若干漏洞并提升了性能。

我们还修复了 CEF 在双 GPU 笔记本电脑上选择错误 GPU 的问题,以及 WebUI 正在播放声音时关闭游戏导致的崩溃。

脚本改进​

角色射击模式​

我们为角色添加了新的射击模式,通过 Character:SetWeaponShooterMode() 启用。在射击模式下,手持武器在空闲或行走时保持瞄准,疾跑时放下,瞄准输入会进行瞄准射击而不是举起武器。

Server/Index.lua
local character = Character(Vector(0, 0, 100), Rotator(), "nanos-world::SK_Male")
character:SetWeaponShooterMode(true)

Client.GetSettings()​

新增 Client.GetSettings(),返回本地玩家的游戏设置(切换疾跑/下蹲/瞄准、鼠标灵敏度、音量等),以便你的 UI 和游戏模式可以适应它们。

Client/Index.lua
local settings = Client.GetSettings()
Console.Log("鼠标灵敏度:" .. settings.MouseSensitivity)

GetSocketTransform()​

Actor:GetSocketTransform() 现在支持可附加 ID,并且还会返回插槽的 Scale。

同步改进​

  • Actor:TranslateTo() 现在在应用同步位置时使用隐含速度,修复了同步卡顿问题。
  • 对上个月的实验性 基于同步系统进行了若干改进,包括修复 CharacterSimple 站在移动平台上时进入下落状态的问题,以及角色站在移动物体上时受到布娃娃伤害的问题。

Ultra Dynamic Sky 挂载​

服务器现在可以挂载自己的 Ultra Dynamic Sky 资产包版本。如果未挂载任何版本,则在生成 Sky 时使用原生版本。

其他修复​

  • 修复了 Entity:CallRemoteEvent() 和 Entity:BroadcastRemoteEvent() 无论调用参数如何都始终以可靠方式发送的问题。
  • 修复了 Vehicle:SetCameraOffset() 未应用于实时相机的问题。
  • 修复了 Sky.SetOverallIntensity() 无法正常工作的问题。
  • 修复了 Character:SetCameraMode(FPSOnly) 将相机附加到角色脚部的问题。
  • 修复了加载已烘焙纹理(例如通过 SetMaterialTextureParameter())在之前未加载过的情况下无法工作的问题。
  • 修复了精简资产包未发送给客户端的问题。
  • 修复了文件传输在第一次传输后显示 PB/TB/s 下载速度的问题。
  • 修复了 --max_tick_rate、--max_sync_rate、--max_send_rate 和 --max_file_transfer_rate 服务器参数未被正确解析的问题。
  • 修复了下载图像时菜单崩溃的问题。

依赖项更新​

  • 将 Lua 更新至 v5.4.9。
  • 将 Steam SDK 更新至 v1.65。

文档​

我们对文档进行了大规模审查:所有 API 函数、事件和参数描述都已更新,大量教程得到改进,错误的示例已修复,我们还添加了许多新页面:

此外,Alpha 测试页面也更新了更多关于测试者注册流程的信息。

结语​

9 月的工作重点是网站,以及为万圣节 Game Jam 做好一切准备。有了项目、中心、支持和全新的个人资料,网站正在成为 nanos world 社区真正的主页,而不仅仅是一个下载东西的地方。

整个网站的大修是我实现完全一体化社区生态系统目标的一部分(我们路线图中的项目之一)。我坚信,为社区营造一个热情友好、协作互助的环境是 nanos world 最重要的部分,我希望确保每个人都能在其中找到自己的位置,并且每个人都能以有意义的方式为其做出贡献。我对我们的社区仍有宏大的计划,并希望在接下来的几个月中继续改进它。

特别感谢所有已经在制作 Game Jam 作品的人,感谢所有通过 Crowdin 贡献翻译的人,以及通过 Ko-fi 支持开发的人!你们的支持让我能够继续全职开发 nanos world。 💙

如果你有任何建议或发现任何漏洞,请在我们的反馈中心告知我们!

Game Jam 见! 🎃

Ko-fiKo-fi

8 月:万圣节 Jam、同步与网站++!

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

宣布万圣节游戏测试与 Game Jam、全新的基于平台的网络同步与数据包打包、新的浮力自定义、全新的网站徽章及更多新功能!

欢迎阅读我们上个月最新更新的汇总!

🎃 万圣节游戏测试与 Game Jam​

标记好你的日历!! 万圣节游戏测试即到来!而且规模空前! 👇

2026 万圣节 Game Jam 预告片

今年我们将万圣节打造成一场正式的 Game Jam,网站上设有专门的活动专区、清晰的提交流程,并由社区投票决定获胜者!

2026 万圣节 Game Jam 横幅

从 9 月 24 日至 10 月 23 日,所有测试者都可以提交自己制作的惊悚游戏模式,或者注册服务器以便在活动期间承办。

在此之后,我们将与测试者进行一次短暂的内部热身测试,随后在万圣节周末(10 月 30 日至 11 月 1 日)向所有人开放游戏测试。

社区将根据多个奖项分类进行投票,获胜者将在活动结束后不久公布!

公开游戏测试​

公开游戏测试将对所有 Steam 用户开放,允许他们在万圣节周末下载 nanos world 并加入体验所有提交的游戏模式。

我们已有成千上万名玩家注册参与游戏测试,预计活动期间还将迎来大量新玩家!这是向广大受众展示你团队(或个人)作品及游戏模式、并获得社区反馈的绝佳机会!

集成 Game Jam 系统​

Game Jam 将完全集成到网站和游戏中,方便你轻松提交游戏模式、注册服务器以及为你喜爱的作品投票。

管理 Game Jam 参赛作品

给 Game Jam 参赛作品评分

在接下来几周内,所有细节和规则都会公布在全新的 2026 万圣节 Game Jam 页面上,请务必关注该页面以获取最新动态!

当然,获奖者将获得专属的特殊徽章,且所有参赛者都将获得 2026 万圣节 Game Jam 纪念徽章! 🏆

准备好迎接充满趣味与惊悚的一个月吧,现在就可以开始构思你想提交怎样的游戏模式了!我们迫不及待想看到大家的创意杰作了。 💙

查看 Game Jam 页面预览 👇👇👇​

2026 万圣节 Game Jamhttps://nanos-world.com/game-jams/halloween-2026

网络基于平台的同步​

我们实现了一个新的实验性 基于平台的同步 (Based Sync) 系统,缓解了角色站在移动平台上时移动不同步或延迟的问题。

先前:

使用 Based Sync 系统前,站在移动平台上的角色

之后:

使用 Based Sync 系统后,站在移动平台上的角色

如果你对此新系统有任何反馈意见或发现任何问题,请随时告知我们!

网络数据包打包​

我们引入了实验性的网络数据包打包:网络数据包在发送前会先合并在一起,从而减少网络传输的数据包数量。

在我们的测试中,在一个拥有数百名玩家的服务器上,该功能最多将发送的数据包数量减少了约 95%,极大提升了服务器性能并缓解了部分连接问题。

网站与社区​

自动徽章​

社区徽章

我们添加了若干全新的自动发放的徽章。当你完善个人资料、评价资源、创建团队或发布资源时即可获得;此外还有针对账户注册时长的老玩家徽章,例如一周年徽章。

我们将继续逐步丰富这些自动徽章的列表!如果你对新徽章有任何建议,欢迎在我们的反馈中心告知我们!

资源收藏​

收藏爱心按钮

我们新增了收藏资源的功能,以此表达对创作者的支持,并帮助他们在商店中获得更多曝光。只需点击资源页面上的爱心图标,即可收藏该资源!

个人资料新按钮​

个人资料新按钮

我们在你的个人资料页(当访问你自己的页面时)中加入了几个新按钮,方便你更轻松地创建新资源和团队。

图片裁剪工具​

全新的图片裁剪工具

全新的图片裁剪上传组件,允许你在为资源或团队上传新图片时,直接在网站上裁剪图片,以确保符合要求的宽高比。

改进的上传进度​

改进的上传进度

我们改进了版本上传区域,带来了更好的上传进度 UI,现在可以显示 上传速度、预计剩余时间 以及 已上传的总大小。这将有助于你更好地估算上传所需的时间,特别是对于较大的文件。

Meta 标签​

适配社交媒体的标准 Meta 标签

我们实现了多种 Meta 标签,因此在 Discord 或社交媒体上分享任何商店或社区页面时,卡片展示会更加美观,能够自动抓取正确的标题、描述和页面图片。

其他改进​

  • 在资源页面增加了 虚幻引擎版本 警告,方便你快速判断某个资产包是否与最新版 nanos world 的 Unreal 版本不兼容。
  • 团队 和 资源 的排序规则现在综合考量了总评分和下载量。
  • 改善了整体导览:统一了导航栏按钮与颜色。
  • 另外也修复了若干漏洞。

脚本改进​

进入/离开水体事件​

我们添加了新的 EnterWater 和 LeaveWater 事件,每当 Actor 进入或离开水体时就会触发。只有启用了物理模拟的 Actor 才能触发这些事件,例如 Character、Prop、所有的 Base Vehicle 以及所有的 Base Pickable。

Server/Index.lua
Prop.Subscribe("EnterWater", function(prop)
Console.Log(prop:GetID() .. " 已入水!")
end)

浮力自定义​

Prop、Base Pickable 和 Base Vehicle 新增了两个用于调整其漂浮的方法:

SetBuoyancySettings 允许你完全启用/禁用浮力作用,或调整浮力系数;而 SetBuoyancyPontoons 允许你覆写用于水体模拟的球形浮筒,以取代根据网格体边界与质量自动计算的浮筒。

备注

浮筒 与 浮力 设置仅在启用了 enable_water_buoyancy 的地图上生效。

HTTP 响应标头​

HTTP.Request() 和 HTTP.RequestAsync() 现在也会返回响应的 headers。

File.Rename​

我们添加了一个新方法 File.Rename(),用于重命名或移动文件与文件夹。

不安全的库检查​

我们还新增了 Server.IsUnsafeLibsEnabled() 方法,该方法会返回服务器是否是带着 --enable_unsafe_libs 参数启动的。

资源库/商店 API 缓存​

我们正在 API 中部署多项缓存机制,以加快资源库和商店的加载速度。

备注

某些操作(例如更新资源或个人资料)现在可能需要几秒钟时间才能完全同步推送给所有人并刷新在主列表中。如果遇到任何问题,请随时告知我们!

依赖项更新​

  • 启用了 NiagaraFluids 与 Mutable 插件的内容。
  • 更新 Discord SDK 至 v1.10。
  • 更新 CEF 至 v151。
  • 更新 httplib 至 v0.53.0。
  • 更新 DLSS 至 v8.7.2。
  • 更新 Sentry 至 v1.19.0。
白名单 UE 插件assets-modding/whitelisted-ue-plugins

结语​

整个八月我们都在为接下来的内容做充足准备。在社区方面,我们非常高兴能将万圣节打造为一场正式的 Game Jam——拥有专属的网站区域、规范的提交与投票流程,以及赢取胜者荣誉的机会。这是我们举办过的规模最大的社区活动,我已经迫不及待想看到大家的创作成果了!

在脚本方面,基于平台的网络同步系统、全新的水体特性以及浮力自定义,将为大量与水相关的游戏模式和机制打开大门!

希望大家喜欢所有这些新功能和改进!我一直在寻求反馈,因此如果你有任何建议或想法,请在我们的 Discord 或反馈中心中告诉我们。

特别感谢所有通过 Crowdin 贡献翻译的人,你们让世界各地的玩家都能更轻松地了解游戏和文档;同时也要感谢那些通过 Ko-fi 支持开发的人!

正是有了你们的支持,我才能继续全职投入到 nanos world 的工作中,并不断推动项目向前发展。 💙

Game Jam 见! 🎃

Ko-fiKo-fi

7 月:全新网站、生成、载具与文档++!

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

全新网站设计、新的 SpawnMode 枚举、载具引擎事件、车灯与动画蓝图、CharacterSimple 下蹲、资源库资源仪表板,以及更多内容!

欢迎阅读我们上个月最新更新的汇总!

我们的新网站来了! 🚀​

我们非常激动地宣布我们的全新网站设计!我们一直在幕后努力工作,为大家带来更好、更美观的网络体验。

让我们一起来游览所有新内容吧!

落地页​

我们的落地页进行了完全重新设计,并且我们添加了一个全新的 ** Testimonials** 部分,展示了社区对 nanos world 的看法!

新的落地页和 Testimonials 部分
提示

你对 nanos world 有什么想说的好话吗?欢迎提交你自己的评价,我们很乐意将其展示出来! 💙

商店​

新的商店主页现在会展示热门的团队和资源,而新的商店浏览则让搜索所有资源变得更加容易:

新的商店主页和商店浏览

当然,资源页面本身也经过了完全重做:

新的资源详情页面

新的资源管理页面

社区​

这是最大的新增内容:一个全新的社区区域,你可以在其中浏览所有用户、团队和徽章!

新的社区页面

现在每个用户和每个团队都拥有自己的公开个人资料。用户个人资料会显示他创建的资源、所属的团队以及获得的徽章,而团队个人资料则为整个团队展示了相同的信息:

新的用户个人资料和团队个人资料

徽章​

新的徽章页面

我们一直在不断添加新的徽章,并开始实现一些自动授予的徽章,比如评价者徽章,它会自动授予每一位在商店中评价过资源的用户。此外,Alpha 测试者徽章现在也会自动授予所有获得测试权限的用户!

我们正在逐步实现更多自动授予的徽章!

提示

我们还有 ☕ Ko-fi 支持者徽章,它会授予所有通过 Ko-fi 支持项目开发的人。这目前仍然是一个手动流程,所以如果你是我们的支持者但还没有获得这个徽章,请告诉我们!

账户管理​

最后,新的账户管理区域是你编辑账户和管理所有资源的地方!

新的账户管理

还有更多!赶快前往你的个人资料添加一段简介吧!快去看看吧,并告诉我们你的想法! 💙

资源库资源仪表板​

与新网站类似,我们也在资源库资源管理屏幕中添加了一个新的仪表板标签页,它会显示一个用于完善你资源个人资料的清单。

资源库资源管理中的仪表板标签页

你只有在完成整个清单后,才能够发布你的资源。这样做的目的是确保每个已发布的资源都包含适当的描述、图片、标签以及玩家决定是否下载所需的一切信息。

我们还改进了标签标签页的视觉效果,并修复了主菜单中资源库资源项的多个视觉问题(例如星级和按钮出现在错误屏幕中的问题)。

脚本改进​

七月在脚本方面是一个工作量很大的月份,我们对实体完成生成的方式进行了重大重构,并加入了大量新的载具功能!

新的生成模式​

我们引入了一个新的枚举 SpawnMode,它取代了所有实体构造函数中旧的 defer_spawn 布尔参数。

现在你不只是能选择“延迟或不延迟”,而是可以精确控制实体在 何时 完成生成并发送给客户端:

  • SpawnMode.Immediate - 在调用构造函数时立即完成生成(默认,即你所熟知的方式)。
  • SpawnMode.AfterConstructor - 保持生成延迟状态,当继承类的构造函数返回时,它会自动完成生成。
  • SpawnMode.Manual - 保持生成延迟状态,直到你自行调用 :FinishSpawn()。
Server/Index.lua
-- 以延迟方式生成,以便在发送给客户端之前进行所有配置
local prop = Prop(
Vector(0, 0, 100),
Rotator(),
"nanos-world::SM_Cube",
CollisionType.Normal,
true,
GrabMode.Auto,
CCDMode.Auto,
SpawnMode.Manual
)

prop:SetScale(Vector(2, 2, 2))
prop:SetValue("Health", 100, true)

-- 直到此时,Prop 才会以完全配置好的状态发送给所有客户端
prop:FinishSpawn()

AfterConstructor 模式与继承类配合使用时,才能真正发挥其优势。在调用 self.Super:Constructor() 之后进行的所有配置都会被批量打包,一次性发送给客户端,你无需再记得调用 FinishSpawn():

Server/Index.lua
MyCube = Prop.Inherit("MyCube")

function MyCube:Constructor(location, rotation)
self.Super:Constructor(location, rotation, "nanos-world::SM_Cube", CollisionType.Normal, true, GrabMode.Auto, CCDMode.Auto, SpawnMode.AfterConstructor)

-- 所有这些配置都会被打包成一个批次发送给客户端,
-- 当此构造函数返回时,FinishSpawn() 会被自动调用
self:SetScale(Vector(2, 2, 2))
self:SetMaterialColorParameter("Tint", Color.RED)
self:SetValue("Health", 100, true)
end

我们还添加了两个新方法,用于在运行时覆盖和查询该行为:

备注

这是一个潜在的破坏性更改::FinishSpawn() 现在即使在继承类的构造函数内部调用,也会立即完成生成并触发 Spawn 事件,并且服务器端的 Spawn 事件现在会在向客户端发送 Spawn 事件之后触发。

如果你的代码依赖于旧的顺序,请仔细排查,如果发现任何问题,请告诉我们!

载具改进​

Base Vehicle 在这个月得到了大量关爱!

引擎事件与状态​

我们添加了新的 EngineStart 和 EngineStop 事件,以及一个新的 Vehicle:IsEngineStarted() 方法,现在你终于可以对引擎的启动和关闭做出反应了:

Server/Index.lua
VehicleWheeled.Subscribe("EngineStart", function(vehicle)
Chat.BroadcastMessage("轰隆!")
end)

前大灯与尾灯​

VehicleWheeled 现在通过新方法 VehicleWheeled:SetHeadlightsEnabled() 和 VehicleWheeled:SetTaillightsEnabled() 实现了完善的灯光控制。

我们还修复了前大灯颜色无法应用于载具材质的问题。

动画蓝图​

载具现在支持 CharacterSimple 已有的全套动画蓝图 API,让你可以直接从 Lua 驱动载具的动画蓝图:

这对于为车门、悬挂、旋翼、起重机或自定义载具的任何其他活动部件制作动画效果非常有用!

相机​

我们添加了一个新方法 Vehicle:SetCameraArmLength() 来控制相机与载具的距离,并将 Vehicle:SetCameraOffset() 移到了基础载具中,因此现在所有类型的载具都可以使用它。

我们还修复了 Vehicle:PlayAnimation() 参数顺序错误的问题,以及 VehicleWheeled:FinishSpawn() 错误地允许被多次调用的问题。

CharacterSimple 下蹲​

CharacterSimple 现在通过新方法 CharacterSimple:SetCrouching() 和 CharacterSimple:IsCrouching() 实现了完整的下蹲支持与同步。

与此同时,Pawn:GetCanCrouch() 和 Pawn:GetCanJump() 被移到了 基础 Pawn 中,现在 Character 和 CharacterSimple 可以共享使用。

我们还修复了角色下蹲无法正确同步给其他玩家的问题。

网络主控事件​

我们添加了一个新的 NetworkAuthorityChange 事件,当 Actor 的网络主控发生变化时触发。

这使得你可以更轻松地知道你的客户端何时成为(或不再是)某个实体的主控,而无需每刻轮询 HasNetworkAuthority()。

新的 Actor 获取器​

Base Actor 添加了两个新的客户端方法:

获取器中的继承实体​

现在 .GetAll()、.GetPairs() 和 .GetByIndex() 也会返回所有继承的实体。

因此,如果你有 MyCubeChild = MyCube.Inherit("MyCubeChild"),调用 MyCube.GetAll() 现在也会返回所有 MyCubeChild 的实例,这正是你对继承的自然预期。

递归附加实体​

Actor:GetAttachedEntities() 增加了一个新的 recursively 参数,用于返回附加到已附加 Actor 上的 Actor,一直向下遍历整个层级结构。

输入绑定状态​

我们添加了一个新方法 Input.IsBindingDown(),用于返回某个绑定当前是否被按住。

与 Input.IsKeyDown() 不同,这个方法使用的是玩家配置的绑定名称,因此它会自动遵照自定义按键绑定:

Client/Index.lua
Client.Subscribe("Tick", function()
if (Input.IsBindingDown("Sprint")) then
-- 在疾跑时执行某些操作
end
end)

Vector2D 辅助​

Vector2D 结构体缺少 Vector 已有的多数辅助,因此我们全部补全了:

感谢 @Ekali 提交的 PR!

浮点曲线蓝图参数​

Blueprint 现在支持将 CurveFloat 作为参数类型,因此你可以直接从 Lua 表构建曲线并将其传递给蓝图:

{
[0.0] = 0.0,
[0.25] = 0.8,
[0.5] = 1.0,
[0.75] = 0.3,
[1.0] = 0.0,
}
蓝图支持的参数scripting-reference/classes/blueprint

协程与回调修复​

我们修复了大部分与 couldn't find env from callbacks 相关的脚本错误,以及使用协程时的多处崩溃问题。

如果你仍然遇到这些问题,请告诉我们,以便我们能够追踪剩余的情况!

其他修复​

我们还修复了:

服务器改进​

内置 HTTP 服务器上的玩家列表​

内置服务器的 HTTP GET / 端点现在除了返回原有的服务器信息外,还会返回玩家列表(名称 + 网络 ID)。

该端点现已内部缓存以提升性能,并且我们修复了因 CORS 导致无法获取的问题,现在你可以直接从网站或面板中查询它。

Steam 认证​

我们改进了连接服务器时的认证系统,以防止 Steam 速率限制导致的问题:现在只有在你的排队位置归零时才会生成票据,而不是提前为所有等待的玩家生成。

我们还改进了多个 Steam 认证的时序问题,现在如果 Steam 初始化失败,日志会显示更具体的错误原因。

Gameplay Abilities 插件​

我们启用了 GameplayAbilities 插件,现在你可以在自定义资产中使用它了!

白名单 UE 插件assets-modding/whitelisted-ue-plugins

文档​

我们在七月花了很大一部分时间重新设计脚本参考的呈现方式!

脚本参考重做​

  • 函数和事件现在会列在侧边栏目录中,并带有主控和原生图标,方便你直接跳转到所需的方法。
  • 改进了函数声明的可视化,新增了独立的返回值表格,并且当默认值为 Lua 表时,渲染效果更佳。
  • 类提示框和基类指示器现在以紧凑的标签形式显示。
  • 基类页面现在显示 \<AnyBASEClass> 而不是具体的基类名称,从而更清晰地表明这些方法是共享的。
  • 改进了表布局和换行,添加了事件/构造函数表的标题,并修复了多个锚点链接(包括枚举标题)。
新的类标签和重做后的侧边栏目录
备注

我们还重命名了部分类页面的 URL,去掉了 - 分隔符,例如 scripting-reference/classes/character-simple 现在变为 scripting-reference/classes/charactersimple。

如果你有任何旧链接被收藏或在你的文档中被引用,请务必更新它们!

详细的服务器配置​

服务器配置页面进行了大幅重写!

现在每个设置都按其 Config.toml 章节分组,并标注了类型、默认值和可接受范围。除此之外,我们还添加了两个全新的章节,解释了底层实际发生的情况:

  • 压缩 - 哪些数据会被压缩、何时压缩,以及哪些文件扩展名会被跳过。
  • 距离优化 - 精确的相关性计算公式,以及展示每个级别的相关性百分比和截断距离的表。

如果你托管服务器,这绝对值得一读,可以最大限度地发挥你的带宽和 CPU 性能!

结语​

本月我们投入了大量精力来改善网页体验,终于将商店、社区和你的账户整合到一个我们引以为傲的设计中!

我们希望确保每位创作者都有一个合适的地方来展示他们的作品,同时社区成员也能轻松找到彼此并建立联系。这与我们的最大目标一致,即不仅要打造一个平台,更要建立一个核心社区,让每个人都能分享自己的创作,并互相帮助、共同成长。

在游戏/脚本方面,我们努力修复、改进和添加了一些缺失但必要的功能。包括正确地规范化生成模式、为载具补全所有骨骼网格体缺失的方法、实现原生的下蹲同步,更不用说脚本本身的修复了(比如长期存在的协程或环境问题)。

希望大家喜欢所有这些新功能和改进!我一直在寻求反馈,因此如果你有任何建议或想法,请在我们的 Discord 或反馈中心中告诉我们。

特别感谢所有通过 Crowdin 贡献翻译的人,你们让世界各地的玩家都能更轻松地了解游戏和文档;同时也要感谢那些通过 Ko-fi 支持开发的人!

正是有了你们的支持,我才能继续全职投入到 nanos world 的工作中,并不断推动项目向前发展。 💙

下一次更新再见! 🚀

Ko-fiKo-fi

6 月:附件重做、脚本安全性与体验优化!

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

全新的个人资料屏幕信息与简介、重做的骨骼网格体附件、新的武器 BulletHit 事件、包沙盒化、胶囊体重做以及更多内容!

欢迎阅读我们上个月最新更新的汇总!

个人资料屏幕增强​

我们在个人资料中添加了一个新的简介字段,允许你填写一段关于自己的简短描述。这是让其他人进一步了解你、你的兴趣或你在社区中创作的作品的绝佳方式。

此外,我们向个人资料屏幕添加了更多信息,包括用户的在线于、加入日期、国家以及侧边栏中的团队图标!

游戏内玩家个人资料

我们仍在继续扩展个人资料屏幕,以提供更多信息和隐私设置,来支持自定义他人可以看到的内容。

你可以直接在管理标签页中编辑自己的简介,快去向社区介绍一下自己吧!

资源库改进​

新的举报按钮​

我们为资源库资源和评价都添加了全新的举报按钮,允许你将任何不当内容或违规行为直接上报给管理团队。

资源库资源中的举报按钮

我们将逐步在游戏的其他区域添加更多举报按钮,以便你可以协助我们共同维护社区的安全!

评价改进​

现在也会在资源库评价标签页中显示用户头像。

资源库资源中的评价

如果你游玩了任何游戏模式或使用了资源库中的资源,别忘了留下评价,让社区知道你的想法!

资源库资源中的评价按钮

危险区​

我们将某些按钮移动到了资源库资源管理标签页中全新的危险区部分,以便更清晰地提醒用户这些操作不可逆,需要谨慎使用:

资源库资源管理标签页中的危险区

DLSS 帧生成选项​

我们重新添加了选择 DLSS 帧生成模式的选项(在支持的情况下包括 auto、dynamic、2x、3x、4x 等),使用了全新的 DLSS 4.5 选项。

DLSS 帧生成设置

脚本改进​

本月我们带来了许多全新的脚本功能与改进!

重做骨骼网格体附件​

我们重做了所有的 AddSkeletalMeshAttached() 方法,新增了 4 个新参数,允许你将网格体附加到特定的插槽,并支持自定义的相对变换,甚至支持自定义动画。这带来了更高的灵活性,甚至可以实现使用自定义的运行时重定向器!

由于新格式属于破坏性更改,我们引入了新的兼容性版本 1.144。有关此更改的更多信息,请参阅兼容性版本 1.144 页面。

文件沙盒化​

我们更改了 File 类访问文件的方式,添加了允许访问的扩展名白名单。尝试访问白名单以外的任何扩展名文件都将抛出错误。

添加此功能是为了防止恶意脚本访问和修改服务器上的敏感文件,并在整体上更轻松地对脚本进行沙盒化管理。

你可以在文件页面中查看所有允许的扩展名:

File 类scripting-reference/classes/file

安全加载 Lua 脚本​

鉴于某些包可能依赖于在运行时使用 File 类来加载 .lua 文件,我们添加了一个新方法 Package.LoadFile(),它能以沙盒化的方式加载 .lua 文件,编译并返回一个函数,你可以使用自己自定义的 env 表来执行该函数:

Server/Index.lua
local loader_func = Package.LoadFile("Server/MyScript.lua")

-- 通过提供自定义环境变量表来定义脚本可以访问的内容
local my_env = {
Console = Console,
math = math,
}

-- 使用自定义环境执行脚本
loader_func(my_env)

通过这种方式,你可以在沙盒环境中加载并执行脚本,从而防止它们访问你不想让其获取的服务器函数或数据。

客户端文件实时重载​

我们添加了一个新方法 Package.ReloadClientFile(),该方法可以重新加载、缓存并向玩家发送更新后的文件,从而在玩家端触发 FileReload 事件。

你可以使用此方法为客户端文件构建自己的实时重载系统,或者在不重启整个包的情况下实时更新文件。为此,只需订阅该事件,并配合使用如 Package.Require(file_path, true) 来重新加载文件即可。

新 Player.GetBySteamID​

添加了方法 Player.GetBySteamID(),用于通过 SteamID 获取 Player 实例,这比遍历所有玩家并逐个对比 SteamID 要快得多。

每个实体可自定义的距离优化​

近期我们引入了服务器端设置 distance_optimization,其工作原理是降低远离玩家的实体的更新频率,从而提高性能并减少网络占用。

为了给该系统提供更好的灵活性,我们添加了新方法 Player:SetDistanceOptimizationMultiplier() 和 Actor:SetDistanceOptimizationMultiplier(),允许你为每个实体自定义距离优化系数,这使你能够根据实体的重要程度或大小,更精细地控制其实体优化方式。

例如,你可以让特定的玩家更频繁地接收更新,或者让特定的 Actor 相比其他实体更新得不那么频繁。

新的流式暂停事件​

我们新添加了 StreamLevelBeginPause 和 StreamLevelEndPause 事件,这些事件会在流式传输系统暂停和恢复关卡流式传输过程中触发。

我们还移除了虚幻引擎原生的 ... 旋转进度条加载 UI——此前当流式传输系统开始加载流式关卡时,该 UI 会显示并隐藏所有的 UI/WebUI。

有了这项改动,你就可以在流式关卡暂停发生时,实现你自己的加载屏幕逻辑。

新的网格体设置​

我们添加了一个新方法 Pawn:SetMeshSettings(),用于配置角色的主骨骼网格体的附加设置与可见性。

你现在可以更改其相对位置/旋转,甚至可以将其隐藏,以便能够配合新的 :AddSkeletalMeshAttached(),使用你自定义的运行时重定向器动画蓝图来附加一个不同的骨骼网格体!

此外在默认情况下,如果你没有使用这个新方法覆盖这些值,主骨骼网格体的偏移量现在会自动根据网格体的大小进行计算。

改进的胶囊体设置​

现在,所有角色都会自动根据骨骼网格体包围盒的大小来计算胶囊体的大小。但你也可以通过 Pawn:SetCapsuleSize() 方法对其进行覆盖。

该方法现在还接受一个 crouched_half_height 参数,允许你自定义角色下蹲时的胶囊体大小。

备注

CharacterSimple:SetMesh() 上的 adjust_capsule_size 参数现已被弃用,你应当改为使用 Pawn:SetCapsuleSize() 方法。

伤害系数返回​

你现在可以从 TakeDamage 事件中返回一个数字,该数字将作为应用到最终伤害上的系数,允许你在现有的应用伤害之上实现自己的逻辑。

例如,如果角色穿着某些装备或具有某些特殊状态,你可以将伤害减半:

Server/Index.lua
Character.Subscribe("TakeDamage", function(character, damage, bone, type, from_direction, instigator, causer)
-- 穿戴盔甲时伤害减半
if (character:GetValue("HasArmor")) then
return 0.5
end
end)
提示

该系数会与所有其他事件的返回值累加。因此,如果你有多个脚本订阅了 TakeDamage 事件,最终伤害将会乘以所有返回的系数。

新的武器 BulletHit 事件​

我们终于添加了 (据说是) 获票数最高的功能请求客户端事件:BulletHit,该事件会在你使用 Weapon 射击且子弹击中物体时触发。

键盘布局获取器​

我们添加了一个新方法 Input.GetKeyboardLayout(),用于获取当前玩家的键盘布局。这非常适合针对 QWERTY、AZERTY 或其他键盘布局构建专门的默认输入绑定。

例如,你可以针对 QWERTY 布局注册 Q 键,或者针对 AZERTY 布局注册 A 键:

Client/Index.lua
if (Input.GetKeyboardLayout() == KeyboardLayout.AZERTY) then
Input.Register("MyAction", "A")
else
Input.Register("MyAction", "Q")
end

计时器剩余时间设置器​

新增了方法 Timer.SetRemainingTime(),允许你设置现有 Timer 超时的剩余时间,从而可以延长或缩短计时器的剩余时间。

其他改进​

性能与网络​

我们提高了快照同步实现的效率,并对内部内存分配进行了若干改进。

此外,我们重做了 :SetDimension() 的实现,使其在性能和网络占用方面都更加高效。如果在此项改动中发现任何问题,请告诉我们,因为这在内部是一次重大的重做。

卧倒已停用​

我们决定停用 Character 的卧倒功能。这是一项尚未完工、较为粗糙的机制,它需要耗费大量的维护精力,并且导致代码库变得异常复杂。

更新依赖项​

  • 启用了 WaterAdvanced 插件。
  • 将 CEF 更新至 v149。
  • 更新了 HTTP 库。

文档​

更新了基本概念​

我们更新了“基本概念”页面,加入了大量关于 nanos world 运作机制以及如何开始编写脚本的新信息。即使你是从其他游戏转过来的,也能借此快速习惯我们的概念和术语。我们还添加了大量全新的代码片段和示例,以便大家熟悉我们的 API!

快来看看吧:

基本概念getting-started/essential-concepts

常规改进​

我们对文档源代码进行了一些改进和重构:

  • 将所有文件转换为 .mdx 格式,以实现标准化并能够使用高级 JSX 功能。
  • 为所有标题添加了明确的锚点“英文”名称,修复了本地化/翻译后的页面无法正确链接到这些标题的问题。
  • 简化了所有 \<MethodReference> 和 \<EventReference> 组件,使其更易于使用。
  • 我们现在会在方法/事件的描述中,显示其最近是否在某个兼容性版本中被修改过。

结语​

6 月是一个充满了脚本改进和体验优化的月份,我们正在逐步改进某些区域,为我们已经规划好的下一次更新打下坚实的基础!

我们的核心目标之一是让社区联系得更加紧密,我们正在开发多项功能,以便玩家能更轻松地寻找并与其他玩家建立联系,同时也让游戏对每个人来说都更加触手可及。

希望大家喜欢所有这些新功能和改进!我一直在寻求反馈,因此如果你有任何建议或想法,请在我们的 Discord 或反馈中心中告诉我们。

特别感谢所有通过 Crowdin 贡献翻译的人,你们让世界各地的玩家都能更轻松地了解游戏和文档;同时也要感谢那些通过 Ko-fi 支持开发的人!

正是有了你们的支持,我才能继续全职投入到 nanos world 的工作中,并不断推动项目向前发展。 💙

下一次更新再见! 🚀

Ko-fiKo-fi