跳至正文
Gabriel • SyedMuhammad
lead developer™

nanos world Lead Developer.

查看所有作者

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!

10 月:Alpha 版本发布!

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

我们自豪地宣布……

……Alpha 版本更新的巨长列表!

初步想法​

感谢大家在上个月给予的所有支持!我们的社区已经壮大了许多,看到它变得如此美好和友善真是太棒了 🥰!

周日的游戏测试活动非常精彩!我们得以很好地测试游戏的稳定性。可以说,我们遇到的大部分崩溃都与外部集成问题(WebUI 或虚幻引擎本身)有关,这展示了我们核心系统极高的成熟度。我想以后可以更频繁地举办这种活动,玩万圣节模式以及测试社区的游戏模式真的充满了乐趣!

从现在开始,所有更新都将开始引入版本控制(终于!),小更新/非破坏性更改将获得 PATCH 版本号,而破坏性更改将获得 MINOR 版本号。

备注

以下更新日志包含了自上次官方宣布的 0.73.0 版本以来的所有功能。接下来的许多项目其实此前已经包含在 bleeding-edge 分支中了。

材质​

现在 nanos world 支持材质资产了! 🎨

这意味着你可以在你的 Assets.toml 中配置自己的材质,并通过 Paintable 方法来引用它们!

函数 :SetDefaultMaterial() 已被替换为 :SetMaterial()。你可以在此处查看所有开箱即用的内置材质列表。

此外,现在还可以获取 WebUI 材质并将其应用到任何表面上(详情见下文)!

由于这一改动,一些现有的方法正在进行重构,例如可拾取物获得了一个新方法 :SetCrosshairMaterial(),因此你可以从材质中设置准星(而不再是通过预定义的列表),同时,所有旧的准星都已转换为材质,你可以在此处找到它们。

改进的 WebUI​

WebUI 迎来了多项改进,包括运行 HTML5 音频和视频的能力! 📽

注意

我们使用的是 Ultralight 的 Beta 版本,该版本支持音频和视频,因此必然会发生崩溃,此外音频目前仅支持 2D。 Ultralight 官方正在研究解决方案,以便我后续能实现 3D 音频。

WebUI 构造函数加入了几个新参数:is_transparent、auto_resize、width 和 height。宽和高仅在自动调整大小为 OFF 时使用,如果你想生成一个 WebUI 并将其作为材质应用到任何表面上(并且不希望它是整个屏幕的大小),这将非常有用。

此外,它还新增了以下方法::SetFreeze()、:Resize() 和 :SetAutoResize()。

引入了全新的搜索器,改进了加载 .html 文件的方式,现在会按照以下顺序进行查找:

  1. 相对于 current-file-path/
  2. 相对于 current-package/Client/
  3. 相对于 current-package/
  4. 相对于 Packages/

现在可以从 WebUI 生成材质,它会自动动态地渲染到任何表面上::SetMaterialFromWebUI()(该方法属于 Actor)。

Actor​

Actor 的新内容:

  • 为所有 Actor 添加了新方法::SetLifeSpan(time),它将在 time 秒后自动销毁该 Actor。
  • 为所有 Actor 添加了新方法::IsBeingDestroyed(),用于返回该 Actor 是否正在被销毁(非常适合在 Drop 或 Ungrab 等其他事件内部进行检查)。
  • 为所有 Actor 的 :AttachTo() 方法添加了新参数:lifespan_when_detached,它将在 Actor 解除连接 time 秒后将其销毁。
  • 现在事件 TakeDamage 拥有一个新参数:causer(造成伤害的对象/Actor)。还添加了新的伤害类型:RunOverVehicle 和 RunOverProp。
  • 现在事件 Hit 拥有新参数:impact_force、normal_impulse、impact_location 和 velocity。
  • 现在 :SetLocation() 将尝试寻找更好的位置传送 Actor(以避免碰撞)。

Character​

Character 的新增内容:

Character 方法的新增与改进:

  • 添加了若干个用于获取其属性的新 Getter。
  • 添加了 :SetDamageMultiplier(),根据受损的骨骼更改伤害乘数。
  • 添加了 :SetHiddenBone(),用以隐藏身体的任意部位。
  • 添加了 :SetJumpZVelocity(),使角色跳得更高。
  • 改进了 :PlayAnimation(),获得了新参数(混合时间、循环和播放速率),现在支持加载任何类型的动画(Montage 或 Sequence)。
  • 移除了 :SetInitialLocation(),它已被替换为 :Respawn()。

Character 事件的新增与改进:

  • 添加了 AttemptEnterVehicle,在角色尝试进入载具时调用,返回 false 可阻止该行为。
  • 添加了 AttemptLeaveVehicle,在角色尝试离开载具时调用,返回 false 可阻止该行为。
  • 添加了 AttemptReload,在角色尝试重新装填武器时调用,返回 false 可阻止该行为。
  • 添加了 Interact,在角色尝试拾取可拾取物或抓取道具时调用。
  • 添加了 Highlight,在角色看向可以拾取的道具或可拾取物时调用。

默认资产包中的部分 Character 动画已从 AM_ 重命名为 A_(因为它们不再是蒙太奇 Montage)。此外还添加了大量新的动画。

武器​

Weapon 的新增内容:

Weapon 方法的新增与改进:

其他新增内容:

  • 现在当角色在驾驶时,武器会被隐藏。
  • 为内置的弹壳粒子添加了弹壳掉落和落地的音效(这是程序生成的、100% 精确的声音 😉)。
  • 添加了拾取或丢下武器时的音效,并且在丢下武器时会将其稍微向前抛出。

手榴弹​

Grenade 的所有属性均已被弃用,现在必须通过方法进行访问。

我们为手榴弹添加了一个特殊粒子 nanos-world::P_Grenade_Special,它会根据手榴弹所处的地面爆炸出不同的粒子效果。也就是说,如果手榴弹在草地表面,它会爆炸出“草地爆炸”粒子;如果在水下,则会爆炸出“水下爆炸”粒子。注: 该粒子仅对手榴弹生效。

声音​

Sound 的新增内容:

现在可以在运行时加载 .ogg 声音了!你可以将它们存储在任何包或资产包中,并使用我们新的 SpecialPath 模式(assets://asset-pack-name/path.ogg 或 package://package-name/path.ogg)进行加载。

向构造函数添加了 loop_mode 参数(现在可以永久循环播放任何声音)。

此外,还可以在任何 Sound 参数中使用 SpecialPath 传入 .ogg。

Sound 方法的新增与改进:

Input​

添加了新类:Input!

现在你可以用正确的方式来控制、创建和自定义按键绑定了!示例:

-- 注册绑定名称 'SpawnMenu',默认按键为 'Q'
-- 这将自动把 'SpawnMenu' 添加到用户的按键绑定设置中
Input.Register("SpawnMenu", "Q")

-- 订阅按键按下事件
Input.Bind("SpawnMenu", InputEvent.Pressed, function()
-- 打开生成菜单
end)

-- 订阅按键释放事件
Input.Bind("SpawnMenu", InputEvent.Released, function()
-- 关闭生成菜单
end)

HTTP​

添加了新类:HTTP!

现在我们有了一个专门用于发送 HTTP 请求的独立类。它还支持异步 HTTP 请求(并且是线程安全的!)

性能优化​

我们在 Alpha 版本更新中对性能技术进行了大量的钻研。以下是本次更新的亮点:

  • 现在基础结构体 Vector 和 Rotator 在通过网络发送时会自动被压缩。在最理想的情况下,其体积最多可减少 90%!这对于网络占用来说是一个极大的利好。
  • 添加了新设置 Profiling,你可以在服务器端使用 --profiling 或在客户端设置中启用它。这将在控制台中记录运行各项操作/脚本事件等所消耗的所有时间。
  • 现在 HTTP 请求(即加入服务器时下载文件的过程)会自动进行压缩,这可以减少下载大文件时的网络占用!
  • 现在,距离非常远或不在屏幕上的 Actor 的同步/更新频率将减半,以提高性能。我们后续仍计划对其进行微调,并在某些情况下使其更加激进。
  • 资产加载系统经过了重做,现在速度快了许多。
  • 小型 Prop(半径 < 200)将不再与玩家或动态物体发生碰撞。此外,较大的道具将默认禁用 CCD(大幅提升性能),这可以在 Prop 构造函数中开启。
  • 现在语音通话使用了 Steam 系统,它提供了极高的压缩率,并且可以通过 Shift+Tab 菜单进行自定义设置。
  • 针对我们的低级 Lua 代码进行了多项改进,以提升脚本编写的性能。

Server​

Server 静态类的新增内容:

Client​

Client 静态类的新增内容:

现在加入服务器时,Windows 任务栏上会显示一个进度条,并且在加载完成后它会闪烁提示:

游戏内控制台​

现在可以在游戏内直接访问服务器控制台了!

如果打开它,将显示 2 个标签页:客户端和服务器。你可以阅读所有的服务器日志,并且还能输入命令。

备注

并非所有的日志都会显示在这里,仅显示你连接到服务器期间所输出的日志。

Timer​

Timer 的新增内容:

命令行界面​

  • 现在可以使用 CLI 一次性下载多个资产/包,只需用空格隔开即可,例如:cli assets install quaternius city-park。

Steam 成就​

通过集成 Steam,我们正在尽可能地利用它所允许的每一项功能 😅!

这其中包括成就!我们得到了有才华的朋友 Esther 的支持,她正在为这些成就绘制令人惊叹的艺术画作!

我们会一步步创建更多成就并发布它们!我们同样期待你为更多成就提出想法!

脚本改进​

  • 向 Package.Require() 添加了新的搜索器,我们目前支持 5 个搜索器,搜索顺序如下:

    1. 相对于 current-file-path/
    2. 相对于 current-package/Client/ 或 current-package/Server/ (取决于你所在的端)
    3. 相对于 current-package/Shared/
    4. 相对于 current-package/
    5. 相对于 Packages/
  • Package.Require() 现在可以在运行时和任何时候被调用。

  • Package.RequirePackage() 现在会将一个包作为库加载到当前包内部,这意味着加载的包会自动发送给客户端,且其加载的所有路径都是相对于该包本身(而非调用它的包)。

  • 详细日志现在将显示当前线程的 ID。

重命名默认资源包​

默认包 NanosWorldWeapons 和 NanosWorldVehicles 已重命名为 nanos-world-weapons 和 nanos-world-vehicles,以遵循包和资产名称的新标准规范。现在引入它们的方式应为 Package.RequirePackage("nanos-world-weapons"),使用方式保持不变(NanosWorldWeapons.AK47())。

常规更改​

  • Cable 获得了新方法::GetAttachedStartTo() 和 :GetAttachedEndTo(),用以获取其两端是否已连接。
  • Player 获得了新方法::SetVOIPVolume()、:GetSteamID()。
  • Pickables 获得了新事件:ReleaseUse 和 PullUse,当角色拉动或释放其使用按键(例如武器扳机)时触发。
  • 改进了 Pickables 和 Props 启用交互触发器的方式。
  • Trigger 获得了新方法::ForceOverlapChecking(),它将在游戏线程中检查重叠并立即分发事件。
  • 为 Quaternions 添加了新方法(+、-、Normalize)。
  • 添加了生成随机 Rotator 的新方法:Rotator.Random()。
  • 在默认资产包中添加了大量新的声音、动画、道具和网格体。
  • 添加了 Steam 登录。
  • 所有 .config 文件中的 tabs 均已被替换为 spaces。
  • .GetPairs() 现在仅支持 pairs。
  • 添加了分辨率图形设置。
  • 删除了游戏内菜单的“Make Day”按钮。
  • 添加了道具或物体进入水中时的全新溅水效果。
  • :GetValue() 现在包含一个额外参数:fallback,当值不存在时将返回该备用值。
  • 可能还有很多其他添加了但被忘掉的东西 😜。

漏洞修复​

  • 修复了 World.SetFogDensity() 不生效的问题。
  • 修复了 Client.SetCameraLocation 不生效的问题。
  • 修复了 Actors.RotateTo() 数学计算不正确的问题。
  • 修复了 StaticMesh.GetBounds() 不生效的问题。
  • 修复了 Cable 方法可以在客户端被调用的问题。
  • 修复了若干 Character 属性未同步的问题。
  • 修复了在运行时更改地图导致崩溃的问题。
  • 修复了角色在重生时生命值未重置为 max_health 的问题。
  • 修复了死亡的布娃娃仍然在移动的问题(来自 MoveTo())。
  • 修复了 LogEntry 事件引发的无限递归的问题。
  • 修复了 Characters 变形目标未同步的问题。
  • 修复了 Discord 自定义集成有时不起作用的问题。
  • 修复了当玩家没有 Steam 个人资料图片时导致崩溃的问题。
  • 修复了在新游戏屏幕取消勾选 Server Announce 时复选框被禁用的问题。
  • 修复了在 Interact 事件内部销毁实体时发生的崩溃问题。
  • 修复了海量的其他崩溃 💥。感谢各位提交的崩溃报告!

额外博客:武器改进!

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

我们在开发 nanos world 时的核心关注点之一就是趣味性,并且我们相信,正是这些微小的细节才让整个游戏体验变得完整。在过去的几周里,我们一直致力于改进和添加一些常见动作的小功能,比如射击、捡起物品,甚至是你对这些动作发生时的感知方式。以下是本次更新的亮点!

全新武器动画​

从一开始,我们的武器在射击时就显得很生硬,给人一种死板和缺乏流畅度的印象。通过添加射击动画这一简单的改进,看看现在的效果是不是好多了:

弹壳的新特效​

除了全新的动画,我们还添加了一个细腻的细节:弹壳落地音效。而且这可不简单!该音效会在弹壳击中地面或任何表面时的精确位置和时刻触发播放,听听:

查看部分武器完整的更新前后对比,你可以细致地注意到所有的改进!



请注意,nanos world 的武器动画和瞄准是完全由程序化生成的,这意味着当你处于第一人称视角时,武器准星的位置是经过动态计算的,从而精准地定位在你的双眼正中间,实现真正的第一人称模式。

拾取物品时的音效​

当你拾取和丢下武器时,我们添加了一个细微的音效细节,并且现在物品会被轻微地向前抛出:

瞄准镜​

在任何武器上添加可附着的物品都非常容易,例如附着一个 AWP 瞄准镜,我们使用 SM_Scope_25x56 网格体来实现:

-- 生成一把 AWP 武器
local weapon = Weapon(location or Vector(), rotation or Rotator(), "nanos-world::SK_AWP")

-- 附加一个瞄准镜网格体,并通过配置偏移量使其完美对齐
weapon:AddStaticMeshAttached("sight", "nanos-world::SM_Scope_25x56", "", Vector(20, 0, 11))

-- 调整瞄准位置,以便在开镜瞄准时将狙击枪精确放置在瞄准镜中心所在的位置
weapon:SetSightTransform(Vector(-15, 0, -4.6), Rotator(0, 0, 0))

这完全是程序化的,它还使用了 3D 网格体瞄准镜材质!

提示

你还可以查看官方武器包,看看是如何给 P90 添加红点瞄准镜的!

就这些!谢谢大家!

9 月:沙盒改进!

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

在过去的一个月里,我们对沙盒游戏模式进行了大量改进,以下是本次更新的亮点!

重构生成菜单的 UI 与 UX​

我们花了很多心思去思考如何让沙盒游戏模式的体验变得更好。为此,我们进行了多项改进,包括在侧边栏中添加类别、新标签页,甚至加入了可以生成的新物品!更不用说还修复了若干漏洞,并全面提升了可用性!现在打开生成菜单时,移动再也不会被卡住了!

全新道具 📦​

我们正在导入一个庞大的道具包,它将随游戏本体一同附带。

关于究竟是让游戏自带大量道具,还是精简本体,让玩家自行从资源库中下载所需内容,我们此前展开了激烈的讨论。这是一个艰难的决定,但目前我们决定先提供一个包含一些酷炫玩意的基础包,其中包括全新的建筑道具、水果、工具,甚至是全新的武器!

NPC 🤖​

其实这个已经加入有一段时间了,但我们想在这里重点介绍一下!现在生成菜单中多了一个全新标签页,允许直接生成 NPC。

这些 NPC 具备一些通过 Lua 定义的基础功能,它们会四处随机游走,甚至在受到威胁时会逃跑!简直太疯狂了!

全新武器 🔫​

虽然这并不完全属于沙盒游戏模式的专属更新,但除了新道具外,我们还在默认的 nanos-world-weapons 包中,附带了全新且已配置完毕的武器!

其中包含了 P90、UMP-45、M1911 手枪以及许多其他武器!

武器涂装 🎨​

除了左侧的类别外,我们正着手添加一个全新的区域来作为我们的“选项区域”。我们首先在武器标签页中加入了一个新选项:涂装。

你可以从游戏内置的数百种涂装中任意选择并应用到你的武器上(并且会与其他玩家同步)!在菜单中添加你自己的 .jpg 图片作为自定义涂装也非常简单!

可破坏道具 🍉​

这是我过去几周一直在开发的一个超赞功能。这完全是脚本端实现的,我目前还不确定是否应该把它做成游戏内置的那种。

但现在在沙盒中,我们可以配置道具在受到撞击或受到伤害时被破坏!同时还能轻松配置会生成哪些碎片、碎片的随机性等等。来看一个示例:

SetBreakableProp("nanos-world::SM_Fruit_Watermelon_01", 700, {
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Half_01", rotation = Rotator() },
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Half_01", rotation = Rotator(180, 0, 0) },
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Crust_01" },
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Slice_01" },
{ mesh = "nanos-world::SM_Fruit_Watermelon_01_Slice_01" },
})

瞧,每次通过生成菜单生成西瓜时,它都会变成可破坏的了!

爆炸性道具 💥​

作为可破坏道具的一个子类别,我们还可以有爆炸性道具!它们不仅在受到伤害或撞击时会碎裂,而且还会爆炸!这会造成伤害,甚至引发连环爆炸的连锁反应!

如你所见,玩火可是非常危险的! 😅

下一步计划! 💡​

我们目前正致力于让一切准备就绪,以迎接官方 Alpha 1.0.0 发布!我们正在向部分测试者陆续发放 Beta 激活码,这样我们可以从容地修复最后一批漏洞,并在全面发布前做好收尾工作!

此外,我们还为模组制作和脚本编写实现了大量新内容,这些内容将在接下来的几周内陆续公布!这将会是一个极其庞大的更新日志列表,因此我可能会分篇在不同的博客新闻中重点介绍各项特性!

本期博客就到这里了!非常感谢大家的鼎立支持! 🥰

8 月:步入 Alpha 测试!

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

自我们开始开发 nanos world 以来,已经过去了漫长的岁月。在 2017 年底,我们开始深入挖掘这个雄心勃勃的想法。我们梦想创造一种无缝的开放世界沙盒游戏体验,而无需受到像《正当防卫 3》或《Grand Theft Auto》等逆向工程游戏的限制。因此我们决定从零开始制作一款游戏,但直到 2019 年年中我们才开始全身心投入,这确实是一个非常让人充满热情的想法,但在付出了大量的鲜血、爱与汗水之后,我们快要实现了! 🥰

Alpha 1.0.0!​

我们终于迎来了期待已久的 Alpha 公告!期间发生了很多事情,进行了大量的迭代(未来还会有更多 😜),感谢来自社区的所有支持以及你们的反馈,我们距离正式发布 nanos world 越来越近了!

官方 Alpha 1.0.0 更新将带来海量的脚本和游戏层面的全新消息!

Steam!​

伴随着 Alpha 公告,我们还准备了许多其他惊喜!正如你可能已经注意到的,nanos world 现已登陆 STEAM!!! Itch 曾经非常棒,在当时给了我们很大的帮助,我们对于他们的服务和支持一直保持免费将永远心存感激!但随后我们做出了决定,迈出这下一步,迁移到这个最大的游戏平台!

提示

🎋 请不要忘记将游戏加入愿望单并分享 nanos world Steam 页面!

全新网站!​

我们创建了一个全新的网站,其中包含大量关于 nanos world 的信息,这将有助于我们的市场营销!如果你还没有看过来,请访问 https://nanos-world.com!

更多新闻即将到来!​

在自上一个更新版本(0.73.0)以来的这段时间里,我们为 nanos world 积累了极其丰富的新内容。由于我们此前一直在同步推进 Steam 的集成工作,因此大部分内容未能在此前发布。

🔢 版本​

随着 Steam 的到来,我们分发更新的方式将发生几项重大变化!我们现在将拥有两个分支:stable/latest 和 bleeding-edge,我们的目标是让默认分支尽可能保持稳定,同时在 bleeding-edge 分支中开发即将推出的新内容。

默认情况下,所有的测试者都将拥有 bleeding-edge 分支的访问权限,以便在正式发布新功能之前帮助我们进行测试!同时在文档中,我们也将提供两个版本来分别代表这两个分支!

信息

a1.0.0 版本已经整合在 bleeding-edge 分支中,并将尽快推送到 stable 分支!很快我们就会开始公布该版本的完整更新日志!

测试者​

在这个全新阶段,我们决定一切从头开始,重新调整我们的测试者订阅。请查看注册参加 Alpha 测试进一步了解如何成为测试者的更多信息。

如果你已经是测试者,请在 Discord 上联系我们以获取 Steam 激活码。我们将优先考虑社区中的活跃成员!

🔮 未来计划​

我们还创建了一个全新的路线图页面,其中包含我们所有的规划,并会重定向到我们的官方路线图面板!

在接下来的几周里,我们将逐步开始发放部分 Steam 激活码,并且我们很快就会发布第一个包含大量新内容的 Steam 更新!

敬请关注!非常感谢你们一直以来的全力支持!