跳至正文

11 月:虚幻引擎 5?

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

新的类、虚幻引擎 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!