跳至正文

7 月:CEF、设置菜单与改进!

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

CEF、设置菜单及多项改进!

经过漫长的时间和无数的请求(以及死亡威胁),我终于宣布与 CEF(Chromium 嵌入式框架) 集成的重大惊喜!

Chromium 嵌入式框架​

对于不熟悉的人来说,CEF 是一个用于在其他应用程序中嵌入基于 Chromium 的浏览器的框架。大致相当于我们的 WebUI。

在此之前我们一直使用我们亲爱的 Ultralight,它起初非常有前途,但由于它是一个专有库,而且不幸的是开发者最终投入项目的时间越来越少,我们开始因缺少功能或未解决的漏洞而受损。

由于我们不能依赖于此,我决定尝试集成更加成熟的框架 CEF。但实现起来一点也不容易。 CEF 使用各种子进程来工作,我发现我必须自己实现。想起大学时的操作系统课程,我打了好几个寒颤。 😜

最终,我成功创建了一个完全合适的集成,包括一个构建自动化,以便在 D+1 总是获取最新的 CEF 安全更新!

进程​

但由于并非一切都是美好的,使用 CEF 既有优点也有缺点。由于其多进程特性,一方面一切都在并行运行(+++性能),另一方面我们有一个缺点,即渲染总是延迟 1 或 2 帧,这可能会导致“输入延迟”效果,但在实践中这不是大问题,几乎察觉不到。

CEF 使用子进程,这意味着每个 WebUI 将完全独立于游戏和其他 WebUI 运行,以极高的效率使用 100% 的计算能力!

这意味着现在所有通信都是异步的。因此,Lua <-> WebUI 之间的所有事件也是异步的,这是一个已经改变的范式,在大多数情况下应该不是问题。但这是并行性带来的“效果”。

另一个变化是,在玩 nanos world 时我们会有多个子进程启动和关闭(就像 Chrome 😝)。这取决于生成的 WebUI 数量,由 CEF 自动管理。

声音​

我们获得的另一个好处是声音!我为 WebUI 类添加了一个新方法:WebUI:SpawnSound(),它会生成一个 Sound 对象(一如既往地 100% 可自定义)。换句话说,你可以生成任意数量的 3D 声音实体,甚至可以用它们搭建一个 7:1 影院! 😆

性能​

如前所述,我们获得了大量性能提升。当然,我会继续改进实现并随着时间的推移进一步提升,但我们已经能看到巨大的改进!看看这段视频,我同时生成了几十个 WebUI 并将它们渲染到世界中的 3D 物体上,没有一丝卡顿:

它能同时处理多少个视频?可以。

调试工具​

现在可以通过第三方工具直接检查你的 WebUI,例如 Chrome 开发者工具! 🥳

迁移​

另外,还有一个好消息:这次迁移将实现 0% 的破坏性更改!没有任何脚本需要更新就能继续与 CEF 配合工作! 💃

显然有些东西已经改变,尤其是与 CSS 相关的部分。在 WebKit 浏览器中(就像之前那样),某些样式的表现与 Chromium 不同。现在某些布局 可能 看起来不太协调(例如不同的滚动条)。

设置菜单​

终于,我们的设置菜单也获得了 UI 更新!我从头重新创建了它,以适应新的界面风格!

视频设置:​

按键绑定设置:​

我们有了一个新的维护设置标签页,可以在那里清理安装中的缓存文件、日志和其他文件:

我们还添加了一个新设置:强制不使用自定义加载屏幕,用于禁用服务器的自定义加载屏幕。

统计信息与成就​

这个月我花时间调整了我们的统计信息和成就。新的个人资料统计信息标签页已经实现:

我创建了一些新的统计信息,如游泳或驾驶,并且我创建了“成就等级”的概念,为它们添加了青铜、白银和黄金级别。让我们看看这个模型的效果如何。 😉

成就通知方面做出了重大改进:现在达成时会立即显示!(之前它们每分钟只同步一次,延迟了通知)。

新成就创意​

我在 Canny 上创建了一个新页面来接收新的 Steam 成就建议!请看一看,投票并添加新的!我会一直将新的成就整合到游戏中!

https://nanos-world.com/feedback/ideas

资源库更新日志​

在资源库方面,我为项目实现了更新标签页,你可以在那里看到它们更新中的所有变更!

缓存与加载​

我做的一个重大改进是重构了缓存系统。我们已经有一个缓存系统,在客户端缓存已加载的资产,这样在重新连接到服务器时文件校验是即时的。

我重构了这个系统,现在所有缓存文件都在一个外部文件夹中(在 Packages/ 和 Assets/ 内,名为 .cache/),这甚至方便了它们的清理。

此外,在打开服务器时,每次资产都被加载并缓存在内存中,这非常慢。有了这个新系统,它们仍然会被加载但快得多,系统会智能地识别变更,并且只重新缓存自上次加载以来变脏的文件。

这将极大地提高服务器的开启速度。

文档改进​

我花了一些时间更新了文档中的一些页面。

我将继续改进文档,以减少冗余,让模组制作者和脚本编写者更容易上手!我发现文档开始变得有点混乱,因为有一些重复内容和一些教程放在奇怪的位置,这些也会得到改进!

显著更改​

一些较小但显著的更改。

WebUI 3D 交互​

这与 CEF 并不完全相关,但我借此机会集成了允许向 WebUI 注入事件并为其创建遥控器的方法:😜

它使用追踪从电视网格体上的命中点获取 UV 位置,然后将其作为 WebUI 事件重定向。

包地图​

我为包添加了一个新设置:compatible_maps,与地图设置 compatible_game_modes 配对。两个设置联合起来,在启动新服务器时在新游戏弹出窗口中显示兼容的地图。

Discord 常见问题频道​

我们的 Discord 新增了一个常见问题频道,包含关于 nanos world 的最常见问题。随着时间的推移会添加更多!

Unreal 5.0.3​

我将游戏的虚幻引擎版本更新到了最新的补丁 5.0.3,包含大量引擎漏洞修复。此更新没有破坏性更改。

结语​

这是 nanos world 取得巨大进步、多项漏洞修复和结构改进的一个月。我们进一步改进了 UI,并解决了长期困扰我们的 WebUI 问题。

我强调在 https://nanos-world.com/feedback/ideas 上创建和支持想法的重要性。将它们正式化非常重要,这样才能了解你们最迫切的需求!以下是 7 月反馈摘要:

非常感谢!你们是最棒的!