跳至正文

2 月:控件与通知!

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

控件与通知!

以下是 2 月最新更新的汇总。

控件​

经过漫长的期待和大量请求,我们很高兴地宣布 nanos world 引入了一个新类:Widget!这个新类允许我们从 Lua 生成 UserWidgets 或任何 Widget 子类,作为游戏中的 UI 使用,类似于 WebUI。

就像蓝图一样,可以从 Lua 调用函数并监听调度器,从而实现两种环境之间的无缝集成。

看看创建一个原生按钮并订阅其事件有多么简单:

local my_button = Widget(NativeWidget.Button)

-- 在其中放入文本
local my_text = Widget(NativeWidget.Text)
my_text:CallBlueprintEvent("SetText", "按我!")
my_button:AddChild(my_text)

-- 绑定原生 OnClicked 调度器
my_button:BindBlueprintEventDispatcher("OnClicked", function()
Console.Log("已点击!")
end)

-- 将按钮添加到视口
my_button:AddToViewport()

-- 调整布局,使其居中
my_button:SetCanvasLayout(Vector2D(0, 0), Vector2D(0, 0), Vector2D(0.5, 0.5), Vector2D(0.5, 0.5), Vector2D(0.5, 0.5))

Widget 的所有原生函数都可以通过 CallBlueprintEvent() 调用。就像事件/调度器也可以通过 BindBlueprintEventDispatcher() 订阅一样!在控件页面中,我们添加了一个章节,链接了所有 虚幻原生 Widget 文档页面,你可以在那里找到它们所有可用的方法和事件!

除了可以生成原生 Widget 外,你还可以从资产包中生成自定义 UserWidget!只需使用另一个构造函数:

local my_custom_widget = Widget("my-asset-pack::WBP_CustomWidget")

我们计划继续扩展 Widget 的功能,并在未来使其能够在 3D 世界中绘制。

现在构建 UI 简直起飞了!

更好的警告​

我们改进了警告系统,为弃用警告添加了行号。这使开发者更容易识别和修复脚本中的弃用代码。

SceneCapture 编码​

我们为 SceneCapture 添加了一个新方法:EncodeToBase64()!

这项新的 SceneCapture 编码功能允许你拍摄快照并生成 Base64 图像字符串,用于 WebUI。我们提供同步和异步两种方法。

聊天中的玩家头像​

我们在聊天中添加了玩家头像,使识别谁在说话变得更加容易。

新的原生服务器命令​

我们添加了新的服务器命令,包括踢出玩家和列出已连接玩家的功能:

  • players - 列出所有已连接的玩家。
  • kick - 将玩家从服务器中踢出。

CharacterSimple 可受伤​

我们为 CharacterSimple 添加了受伤和死亡的支持,就像现有的 Character 类一样。

此外,我们还为 BaseDamageable 添加了新的文档页面,包含所有 Damageable 的方法和事件!它在 Character 和 CharacterSimple 之间共享!

新的自定义设置类型:选择​

我们添加了一种新的自定义设置类型:选择。这个新选项在主菜单中显示为下拉菜单,允许玩家在游戏模式 Package.toml 的 custom_settings 设置中选择一个预定义选项。

致命崩溃报告​

我们现在会自动将所有致命错误发送到我们的崩溃报告系统。由于致命错误通常是“不应发生的已处理错误”,这有助于我们快速识别和修复问题,提高游戏的整体稳定性。

蓝图材质作为参数​

我们扩展了蓝图支持,以包含来自 WebUI、Canvas 和 SceneCapture 实体的材质参数。这意味着蓝图现在可以自动从这些实体接收 MaterialInterface 参数。

提示

新的 Widget 类也从中受益!

你可以在 Blueprint 文档页面中查看所有可能的参数类型列表。

资源库改进​

标签​

我们为资源库显示添加了新图标,用于指示资源是否为官方资源,或者你是否拥有其所有权(属于其团队)。

所有权管理​

此外,我们还添加了一个用于管理资源的新标签页,目前仅包含一个跳转到商店的按钮。

本地文件夹​

我们还添加了一个新按钮用于打开本地安装文件夹,使管理已下载的资源更加容易。

无网络连接​

即使玩家没有网络连接,资源库现在也能正常工作并加载本地资源。

我们在主菜单中添加了通知,用于显示一般错误和资源库消息。这意味着当资源安装完成或发生错误时,通知将会出现。

当前会话的所有通知都可以在通知 🔔 按钮下的新窗口中找到。

Assets.toml 文件校验器​

我们添加了一个新系统,可根据 Assets.toml 自动校验资产包文件。该系统会检查 Assets.toml 中列出的文件是否在磁盘上找不到,帮助快速识别和调试资产问题。

它仅在服务器加载资产包时运行,并会在控制台显示警告。

新的追踪方法​

我们为 Trace 添加了新的追踪方法,包括 SphereSingle()、SphereMulti()、BoxSingle()、BoxMulti()、CapsuleSingle() 和 CapsuleMulti()。为游戏世界提供了更多追踪可能性!

新的 Sky 方法​

我们添加了多个新的 Sky 方法,允许自定义 Moon 以及 Ultra Dynamic Sky 的其他新属性。

网络通道​

我们对游戏框架的网络层做了重大改动。 VOIP 和文件传输现在使用新的低优先级网络通道来传输数据。这意味着当玩家连接(并下载文件)或使用 VOIP(会使用大量网络数据)时,对游戏玩法性能的影响降低了。

Steam 是否已启动​

我们添加了一个更好的校验器,用于在启动游戏时检查 Steam 是否已启动。现在会弹出一个提示框,而不是让游戏崩溃。

千万别按“否”。 😉

结语​

上个月我们为 nanos world 带来了令人兴奋的新功能和改进!

最受期待的新增内容之一是新类 Widget 的引入!这确实令人兴奋,因为它将大大增加在游戏内创建 UI 的可能性!

菜单通知也为玩家带来了很多便利,我们经常遇到后台发生问题却不知道的情况。有了新的通知系统,我们现在会收到问题警报,也能知道资源库正在做什么!

CharacterSimple 现在更加完整了!随着伤害系统的加入,它现在可以更好地用作敌人或简单的 NPC!

所有这些更新和改进都旨在提升游戏的整体稳定性和体验!非常感谢你们的建议、想法和漏洞报告!

下个月见! Nogitsu 终于可以安息了。 😁