跳至正文

1 月:角色、天气、控制台!

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

新 Character、天气系统、控制台命令/布局以及更多!

新 Character 类​

这个月我们努力重构了内部的 Player/Character 实现及其交互的所有内容(Weapon、Prop、Vehicle)。我们的内部代码仍然与主 Character 实体紧密相连,一切都直接引用它。因此我们努力将它们模块化,从而允许添加新的“子”Character 类。

作为初始版本,我们创建了新的 CharacterSimple 类。一个“简单”但强大的新类,除了基本移动(基于虚幻引擎基础 Character)外没有特殊功能,但它允许通过传入自定义动画蓝图来构建!它还支持传入 StaticMesh 作为网格体,我们会根据网格体大小自动调整其胶囊体尺寸,非常适合道具躲猫猫!

这个新的 Character 实体可以被任何东西使用,自定义 NPC、动物、Prop 等。而且它们都可以被玩家附身!

信息

我们将研究为此类添加更多功能的能力(例如驾驶载具或操作武器)。由于这个类旨在保持简单,因此到目前为止尚未添加这些功能。

在 CharacterSimple 类页面中了解更多。

文档改进​

文档中重要改动的摘要。

沙盒章节​

我为沙盒游戏模式添加了一个新的章节。其中包含关于生成菜单、上下文菜单和工具枪如何工作的示例,并教你如何创建脚本来扩展或创建与之集成的新功能!这是我们很棒的新快速入门!

更新日志​

我们新增了一个更新日志标签页,包含 nanos world 的最新更新!

兼容性版本​

我将兼容性版本页面移到了 核心概念 / 包 章节下的一个新单页中。现在所有兼容性版本的变更及其指南都将集中在那里。

改进的 CSS​

我们对文档布局和 CSS 做了一些改进。移动端显示得到了改进,我们在 API 定义之间添加了新的分隔线,让一切看起来整洁!

资产疑难解答​

我添加了一个新的资产疑难解答章节,包含最常见的问题及其修复方法。

ADK 已上架 Steam​

现在可以直接通过 Steam 下载并使用资产开发套件了!这个新的 nanos world Steam 工具条目使 ADK 始终保持更新!它会自动启动虚幻编辑器。

新的控制台颜色​

我们重做了控制台布局,现在它更加色彩丰富和漂亮!它变得更加健壮和现代!希望你喜欢!

控制台命令​

我们推出了官方的控制台命令系统。这个新系统允许向服务器和客户端控制台添加自定义控制台命令,并在输入 help 时将其集成到可用命令列表中。

这是一个简单的初始实现,你可以定义参数的名称及其描述,未来我们可能会扩展它以定义期望的类型、默认值等:

Console.RegisterCommand("myawesomecommand",
function(parameter_one, parameter_two)
-- 对 parameter_one 和 parameter_two 执行某些操作
end,
"此命令执行超棒的代码", -- 描述
{ "参数一", "参数二" } -- 参数
)

在 Console.RegisterCommand 方法页面中了解更多。

Steam Avatar​

现在可以获取玩家的 Steam 头像了!我们添加了一个新方法 Player:GetPlayerIconURL(),它返回一个特殊 URL,可在 WebUI 中加载 Steam 头像:

天空与天气​

我们将 Ultra Dynamic Sky 的天气系统集成到了 Sky 类中!现在可以通过 Sky.ChangeWeather() 更改当前天气,如果你拥有 UDS,甚至可以使用其资产内容中的 Ultra Dynamic Sky 材质函数将其集成到你的地图中!

我们在上下文菜单中添加了一个新的下拉菜单,允许你从中更改天气:

此外,Sandbox 上下文菜单有一个专门用于控制天气和天空的新章节,以及一个自动天气变化系统,可将当前天气同步给所有已连接的玩家!

新的 Config.toml 格式​

服务器配置文件被完全重做。现在我们有了多个不同的章节,以及更多可通过其设置的选项。几乎所有可通过命令行参数使用的设置现在都可以在那里持久定义。

在此处查看完整的配置文件架构。

压缩​

新增的一个设置是 compression,它允许你配置应用于某些网络操作的压缩量(0 为无,9 为极致)。目前我们正在测试这个新的压缩系统用于小文件传输和服务器需求清单,在启用它时,我们看到了这些文件大小最多减少 90%!

提示

使用高压缩级别会影响服务器和客户端性能,因为我们为 CPU 增加了一层计算处理。

关卡实体设置​

现在可以在 Package.toml 中切换是否加载关卡实体,也就是将关卡 StaticMesh 作为实体加载。此设置作为全局 OR 设置,如果我们至少有一个包启用了它,该设置将在全局启用。

如果我们不需要通过脚本使用或引用关卡的 StaticMesh,此设置允许我们跳过大量处理和运行时性能损失。

Map.toml 的新设置​

我们为 Map.toml 添加了两个新设置:package_requirements 和 compatibility_version,使地图包能够更好地独立工作。

Level Streaming 支持​

我们实现了对 Level Streaming 和 World Partition 的完全支持。之前它们没有正确集成到我们的 Level 类中,但现在自动流送以及 World Partition 区块的加载/卸载也会触发事件!它现在还与关卡实体集成,使关卡 StaticMesh 也能按需作为实体加载/卸载!

大世界坐标​

我们的 Vector 结构体经过了重构,现在支持双精度 Vector 结构体!这意味着 nanos world 现在可以实现巨大的关卡!在虚幻引擎官方文档页面中了解更多。

WebUI 布局​

我们为 WebUI 添加了一个新方法,虽然看起来简单,但它极大地扩展了 UI 的可能性和模块化。现在可以通过 WebUI:SetLayout 更改 WebUI 的 Canvas 布局。

此方法允许更改其 Canvas 布局(锚点、偏移、对齐),这意味着我们可以让 WebUI 像小弹窗一样工作,允许你在屏幕前方有小的 WebUI 时点击背景中的 WebUI!

WebUI ExecuteJavaScript​

我们为 WebUI 添加了一个新的 实验性 方法:WebUI:ExecuteJavaScript。这允许在你的 WebUI 中执行任意 JavaScript 代码。

备注

此方法仅对本地 WebUI 有效。

上个月我们从 Config、Package 和 Asset Pack 中移除了 logo 设置,因为现在它们都必须是本地放置的 jpg 图片。但现在我们为服务器重新添加了 --logo 命令行参数,允许它自动下载为 Server.jpg 图片!允许你轻松设置远程服务器并为其添加徽标。

新的图形设置​

我们添加了一个新设置,允许将阴影贴图方法更改为使用新的实验性虚拟阴影贴图方法!

CEF 帧率​

我们通过动态配置 CEF 的渲染/更新率改进了其实现,现在它以与游戏相同的速率刷新,大大提升了流畅感。

HTTP 与 Database 重命名​

我们重命名了 HTTP 和 Database 方法,以遵循正确的命名标准。

例如我们将 HTTP:Select 改为同步方法,并添加了新的 HTTP:SelectAsync 方法作为新的异步方法。在官方文档页面中查看更多关于这个新兼容性版本的信息。

结语​

几个月来,我们在代码库内部进行了重大的显著改动(到目前为止这些改动只是给游戏添加了随机的漏洞 😜),但终于我们可以开始看到好的结果,能够通过推出新类来扩展 API,比如新的 CharacterSimple!

我喜欢做这些改进,比如控制台布局或 Config.toml 的改动,因为它们极大地提升了我们作为开发者的生活质量,并给事物带来清新的气息。

我很惊讶 Ultra Dynamic Sky,特别是天气集成做起来竟然如此容易。真的就是把蓝图拖放到地图里而已!这为玩家增添了更多的沉浸感!

在这次更新中,我们解决了迄今为止的几个僵局,例如大世界坐标或 Level Streaming/World Partition,这些之前都不确定是否能工作。更不用说新添加的 Character 类,这是备受请求的东西,将为游戏增加更多可能性!而这仅仅是开始!

感谢又一个月的支持!希望你喜欢这篇新闻博客!下次见!