11 月:虚幻引擎 5?
新的类、虚幻引擎 5 实验与脚本改进!
新类:Decal

我们添加了一个用于生成贴图的新类!贴图是投影到关卡中网格体(包括静态网格体和骨骼网格体)上的材质。你可以在运行时从磁盘加载任意 .jpg 文件,并将其用作贴图材质中的参数!
由于 Decal 继承自 Actor,你可以更改其位置、旋转角度、附加它,或者对其调用 基础 Actor 的任何方法!
新类:Billboard

我们还添加了另一个用于生成告示牌的新类! Billboard 是一个 2D 材质,它在渲染时会始终面向相机。你还可以使用 Paintable 的所有自定义方法,并在其上生成自定义纹理。你可以通过 Base Paintable 调整其材质属性,甚至可以使用你自己的材质。
由于 Billboard 继承自 Actor,你可以更改其位置、旋转角度、附加它,或者对其调用 Base Actor 的任何方法!
新类:Melee

我们迎来了一个呼声极高的全新类:Melee! Melee 将取代先前的 Item 类。
Melee 是一个新的类(其工作原理与旧的 Item 完全相同),但现在具备了进行攻击的能力。可以为其添加自定义动画、冷却时间并调整其伤害值。攻击物理判定是基于动画程序化生成的,这意味着只需更改动画,即可实现刺击、斩击甚至砸击效果,打击判定将基于动画来确定!
效果相当有趣,打击/伤害还会动态地影响周围环境 😊
脚本改进
我们听取了大家的呼声,终于带来了期待已久的全新强大脚本功能!
真正的热重载

在收到多次请求后,我们开始实现真正的热重载功能!
真正的热重载是一项强大的功能,允许你加载新的脚本代码,而无需丢失包当前的所有内存状态。它的工作原理是在当前运行的 Lua 虚拟机上重新加载脚本文件。
目前,可以通过在控制台中手动触发来使用它:
package hotreload [PACKAGE_NAME|all]
这将使用更新后的文件版本更新客户端,并加载包中的 Index.lua 文件。它将保持包的当前内存状态不变。它还会取消订阅该包中注册的所有事件。
未来,可能会添加实时检查器,以便在保存修改后的文件后自动更新。
扩展类

正在添加的一项酷炫新功能是扩展和继承 nanos world 的类。该功能仍处于实验性,我们希望收集你的反馈并找出遗漏的漏洞。
现在可以向 nanos world 的类添加新方法、重写现有方法,甚至重写 __index 和 __newindex。
像这样向类添加新方法非常简单:
-- 向 Player 类添加新方法 'AddScore'
function Player:AddScore(score)
self:SetValue("score", self:GetValue("score", 0) + score)
end
-- 使用该方法
my_player:AddScore(10)
阅读完整文档请点此。
新视角模式:TopDown
我们创建了一个全新的原生视角模式:TopDown!
此视角模式允许你从俯视视角完全控制角色。
只需一行代码:
my_character:SetViewMode(ViewMode.TopDown)
nanos world 会变成一款截然不同的游戏,鼠标指针变为了角色瞄准的准星。拾取武器、抓取道具和与物体互动的机制经过了微调,以适应此 ViewMode。同时,驾驶也获得了完全支持! 🤩
此外,还可以在游戏过程中动态更改并在不同视角模式之间切换,同时调整相机距离等设置。
新相机方法
Player 获得了一系列新的相机方法:Player:SetCameraSocketOffset()、Player:SetCameraArmLength()。
以及将其解绑并附加到其他 Actor(👀 包括道具)的能力:Player:AttachCameraTo() 和 Player:ResetCamera()。附加时将包含相机 SpringArm 组件!
注意:来自 Client 的 Spectate 方法已移动至 Player:Player:Spectate()。
服务器端上的 TextRender
现在类 TextRender 也可以在服务器端生成了!
其他更改
除了这里涵盖的主要主题外,本月我们还添加了其他几个新功能:
- 为 Character 添加了新方法:
Character:Follow(),这将使 AI 跟随其他 Actor。 - 添加了新的工具方法:
NanosUtils.Benchmark(),它接受一个函数作为参数并测试其性能。 - 现在
Subscribe将返回回调函数(随后可用于取消订阅)。 - 修复了大量漏洞,详细信息可在 Discord 的 Changelog 频道中找到。
虚幻引擎 5

最后,大家都知道我们有一个将 nanos world 移植到虚幻引擎 5 的重大目标。就我个人而言,这是我想尽快做的事情,因为虚幻引擎 5 的特性非常惊艳,更不用说它能为 nanos world 带来的宣传和营销红利了。
在本月,我们决定尝试一下:测试将 nanos world 移植到虚幻 5。起初我们遇到了一些问题,因为某些虚幻模块已被完全重命名甚至移除。此外,较新版本废弃了一些虚幻方法,因此我们需要更新它们,甚至重新实现一些微小内容。
目前虚幻引擎 4 使用 PhysX 物理引擎,而在虚幻 5 中,所有物理引擎已被 Unreal's Chaos 取代,这是一个替代 NVIDIA PhysX 的全新引擎。
这导致我们在本次测试中不得不禁用载具,因为虚幻的载具高度依赖 PhysX 引擎,我需要使用新的 Chaos 载具 API 重新实现它们(我相信一旦我们全面更新它,我们的载具 API 也需要做出相应修改)。
但是在经过一些适配并禁用载具之后,结果出奇地好! nanos world 在虚幻引擎 5 上成功运行了!得益于 nanos world 迄今为止开发的架构,我遇到的最大问题仅仅是更新废弃方法和更新部分虚幻模块,这让我感到非常高兴和自豪!
图形结果
虚幻引擎 5 上的 nanos world 非常惊艳,体验 Lumen 和全局光照真的很棒!
虽然存在一些画面瑕疵(比如过快改变时间会导致延迟/鬼影效果),但我相信他们在虚幻引擎 5 的最终版本中会加以改进。
来看看测试全局光照和 Lumen 期间截取的一些截图吧:






稳定性
很遗憾,稳定性非常糟糕。这并没有太让我意外,因为虚幻引擎 5 尚处于 Early Access 抢先体验阶段,因此出现漏洞和崩溃是在所难免的。在游戏过程中发生了多次随机崩溃,我注意到其中大部分是由新的 Chaos 引擎(与物理相关)引起的。
现在怎么办?
能够将 nanos world 移植到虚幻引擎 5 让我非常高兴,这次尝试让我们确信这是完全可行的。但我决定,目前还不是时候。在测试期间,我们遇到了多次崩溃(随机崩溃,与虚幻底层相关,主要来自 Chaos 引擎和水体系统),这使我们得出结论:最好等待更稳定的版本,因为这会导致 nanos world 暂时无法正常游玩。这些随机崩溃非常棘手,因为有时很难断定是我代码的问题还是虚幻引擎本身的缺陷。
幸运的是,通过这次测试我们向自己证明了,当时机成熟时,nanos world 必将兼容并更新至虚幻引擎 5!
