5 月:控件 3D、资产元数据!
Widget 3D、资产元数据、资源库上传、客户端触发器及更多!

来看看 5 月最新更新的汇总吧!
更轻松地上传到资源库
我们很高兴地宣布,现在有更简单的新方法将你的包和资产包的新版本上传到资源库!
通过 CLI 上传
我们添加了一个新的 CLI 命令 package upload 和 assets upload,允许你通过 CLI(命令行界面)轻松上传你的包或资产包的新版本。
该系统会校验、压缩并将你本地资源的新版本直接上传到资源库。它简化了流程,节省你的时间和精力。
./NanosWorldServer.exe --cli upload package default-weapons

通过 UI 上传
我们还使你可以直接从资源库管理标签页上传新的包或资产包版本。
这个新系统现在会自动检测你本地版本是否比远程版本更新,并显示上传按钮。

上传完成后,将出现一个弹窗,提醒你在商店中批准发布。这是一种无缝便捷的方式来管理和更新你的资源。

观看上传过程演示:
新类:Widget3D
我们很高兴地介绍新类:Widget3D。该类提供了现有 Widget 的 3D 表示!使我们能够让控件作为 Actor 在 3D 世界中渲染!
你可以通过新的 Widget 方法 SpawnWidget 生成 Widget3D 类:
-- 生成并配置一个 Widget
local my_widget = Widget(NativeWidget.Image)
my_widget:CallBlueprintEvent("SetBrushFromTexture", "package://testing/Client/MyImage.jpg")
-- 从 Widget 生成 Widget3D
local my_widget_3d = my_widget:SpawnWidget3D(Vector(0, 0, 200), Rotator(0, 90, 0))

地图包创建流程
我们通过 UI 对地图包创建流程进行了重大改进。
现在,选择地图资产变得容易多了!系统会自动获取所选资产包中包含的所有地图资产,让你可以方便地选择所需的地图资产,简化了地图包的创建过程!

观看地图创建过程演示:
资产元数据
现在我们可以在 Asset.toml 中为单个资产定义元数据(自定义值)!之前我们只能通过路径定义资产:
[assets.static_meshes]
SM_Flower_01 = "MyFolder/SM_Awesome_Flower_01"
SM_Rock_01 = "MyFolder/SM_Rock_01"
SM_MyAsset_01 = "MyFolder/SM_MyAsset_01"
# ...
现在我们可以将它们定义为表,允许为每个资产设置自定义值!
[assets.static_meshes]
SM_Flower_01 = { path = "MyFolder/SM_Awesome_Flower_01", my_tag = "Wonderful", something = 123, thumbnail = "Thumbnails/SM_Flower_01.jpg" }
SM_Rock_01 = { path = "MyFolder/SM_Rock_01", my_tag = "Wonderful", something = 123, thumbnail = "Thumbnails/SM_Rock_01.jpg" }
SM_MyAsset_01 = { path = "MyFolder/SM_MyAsset_01", my_tag = "Wonderful", something = 123, thumbnail = "Thumbnails/SM_MyAsset_01.jpg" }
# ...
在资产元数据文档部分了解更多:
资产元数据core-concepts/assets客户端触发器
现在,我们的 Trigger 类也可以在客户端生成!让脚本编写者可以在客户端以与服务器相同的方式使用触发器!
附加网格体功能
我们在附加网格体功能方面获得了一系列改进和新方法!
我们引入了新方法,使你可以直接在附加网格体上自定义其材质:SetMaterialScalarParameterOnAttached() 和 SetMaterialVectorParameterOnAttached()。这消除了(并弃用了)使用常规方法设置材质参数时对 attachable:// 模式的需求。
此外,我们还添加了便捷的获取器,如 GetAll[Static/Skeletal]MeshAttached(),用于检索所有当前附加的网格体及其路径。
最后,我们有了 SetStaticMeshAttachedTransform(),允许脚本编写者在运行时更改附加网格体的变换(位置/旋转)!
P2P 改进
我们解决了 P2P(非专用服务器)功能实现中的几个问题,特别是与连接到 P2P 本地主机服务器相关的问题。我们开发了一种新的混合解决方案,解决了其中大部分问题。
P2P 服务器使用 Steam 骨干网来实例化一个新的虚拟 IP,该 IP 提供给其他玩家以连接到你的服务器,而无需你在路由器中转发端口。
问题在于你只能通过这个新的虚拟 IP 连接,例如无法通过 localhost (127.0.0.1) 连接,所以我们有一个 hacky 实现,它会识别你正在连接到本地主机服务器,并尝试直接从其中检索这个虚拟 IP,这非常脏,并且存在许多缺陷和不可预见的后果/漏洞。
但最终幸运的是,我们成功实现了一种解决方案,通过现在采用混合方法解决了所有问题!现在所有 P2P 服务器也允许“专用”连接,使它们能够同时通过 localhost 和虚拟 IP 进行连接!
杂项改进
兼容性版本 1.54
最后,值得一提的是本月我们引入了一个新的兼容性版本 1.54,对 Level.CallLevelBlueprintEvent 进行了更改,通过启用可变参数使其与常规蓝图函数保持一致。还有 Client.GetPackages(),使其也像 Server.GetPackages() 一样工作!
多包重载
现在可以使用控制台命令一次重载/加载/卸载多个包!例如:
package reload sandbox battlefield-kill-ui
更新的 CEF 和 Steam
我们已将 CEF (114) 和 Steam SDK (1.57) 库更新到最新版本!由于 Linux (Proton) 的一些问题,我们的 CEF 已落后近 1 年,但现在它们似乎都已修复,我们再次保持最新状态!
UFont 和 UClass 参数
现在蓝图支持从 Font TTF Path 接收 UFont,并从虚幻引擎常规路径(/Game/MyAsset/MyClass.MyClass_C)接收 UClass!
资源库刷新
我们也在资源库物品屏幕中添加了刷新按钮!它位于导航栏的右侧:
结语
本月的目标是更加鼓励脚本编写者/模组制作者将他们的资源上传到资源库。由于现在推送新版本只需点击几下,而且流程已高度自动化,许多障碍已被消除!
创建地图包的新工作流程也旨在鼓励脚本编写者/模组制作者以更简单、更快速的方式从其资产包创建地图包!
我下一步想做的是能够直接通过资源库 UI 创建包/资产包并在商店批准发布(目前我们仍需要使用网站来完成),然后我们将拥有在游戏内完成创建和上传资产的完整流程!
我认为资源共享是沙盒游戏的关键因素,我想尽可能改进我们在这方面的设计,使其更加容易!
总之,本月我们在模块化和脚本能力的各个方面都取得了重大改进!
Widget3D 将在 3D UI 创建方面带来许多改进(例如名称标签或简单的自定义 3D 文本/标志)。
而资产元数据是改进资产分类这一略显模糊领域的巨大一步。很快我将更新所有标准资产,添加标签、类别,并更新沙盒包以更标准化的方式使用这些!
感谢又一个月的支持和帮助!下个月见! 🤗🤗
