【Studio】枢轴编辑器: 正式发布

当前枢轴状态:已面向所有用户开启,仍可手动关闭
我们高兴地宣布 Roblox Studio 的枢轴功能已正式发布!在接下来的几周内我们将向所有 Studio 用户推出枢轴功能:

  • 我们会先向 10% 的用户开启试用。如果你没有看到枢轴编辑器,请别担心:你仍可以手动开启枢轴功能,只需打开“Pivot Editor”(枢轴编辑器)测试版功能即可。
  • 枢轴功能是否影响了你的 Studio 体验?你也可以通过停用“Pivot Editor”(枢轴编辑器)测试版功能来手动关闭试用。由于我们最终会移除测试版功能以及手动停用,所以如果你选择停用,请告诉我们导致你这样做的原因。

这是跳转至 DevHub 文档的链接,以及下面是为没有关注测试进度的人而准备的简要说明:

枢轴指示器
每个部件和模型现在都有属于其自己的可配置的“枢轴”,建模工具和一些 Lua API 会围绕它来操纵。当你选择操纵对象位置的工具时(移动、缩放、旋转或者任何设置 DraggerService.ShowPivotIndicator = true 的社区插件),你将看到这些对象上出现的枢轴指示器,显示其枢轴的位置:
1

拖拽器的改动
本次更新对移动、缩放和旋转工具的外观进行了一些修改。这些工具的手柄将显示在枢轴的周围。移动工具的手柄则被向内做了调整,以便让其直接显示在枢轴周围,而非选择框的外部。
2
除了这一改动以外,现在你也可以按住 Tab 键来直接将移动、缩放和旋转工具的手柄“召唤”到你的鼠标位置上。这样无论你的镜头朝向如何,都可以轻松地操纵选中的内容。同时这也为旋转工具添加了额外的功能:


好吧,这个功能听起来很棒,但我该如何设置枢轴的位置……?

编辑选项 1:编辑枢轴工具
模型选项卡中现在多了一个“枢轴”部分,其中包括“编辑枢轴”工具,可以让你设置部件或模型的枢轴在什么位置:
4
当你用编辑枢轴工具选中一个对象时,你可以通过以下三种方式编辑枢轴:

  1. 用一组移动手柄来移动枢轴。
  2. 用一组旋转手柄来旋转枢轴。
  3. 直接拖拽枢轴指示器来自由移动枢轴。

5
当枢轴部分的“对齐”关闭时,枢轴可以自由地移动。当开启时,枢轴将对齐至其对象的边界框上的“关键点”:
6

编辑选项 2:属性面板
你也可以在属性面板上输入数字来编辑枢轴的位置。模型和部件在这方面稍有不同:

  • 部件有“Pivot Offset”(枢轴偏移)属性,指定枢轴从部件的 CFrame 的本地偏移量。
  • 没有 PrimaryPart 的模型有“World Pivot”(世界枢轴)属性,指定了模型的枢轴在世界空间中的位置。
  • 有 PrimaryPart 的模型的枢轴与其 PrimaryPart 的枢轴完全一致(为了方便,这里属性面板会显示选中模型的 PrimaryPart 的“Pivot Offset”(枢轴偏移))。
    7
    如上图所示,我们也在模型和部件中添加了“Origin Position”(源位置)/ “Origin Orientation”(源朝向)属性,可让你通过其枢轴来实现部件或模型的移动。

编辑选项 3:Lua API
注意:这些 Lua API 目前已正式推出,你随时可以开始使用它们!

最后,以下是既可以改变部件或模型的枢轴位置,又可以通过枢轴来移动此部件或模型的 Lua API:

例如,要将一个模型相对于其枢轴向“上”移动 2 个单位,你可以这么做:

local model = …

model:PivotTo(model:GetPivot() * CFrame.new(0, 2, 0))

这意味着 :PivotTo() 现在提供一个统一的 API,用于移动部件和模型。

:PivotTo() 也比其他可用于此功能的 API 有一些优势,例如 :MoveTo() 和 SetPrimaryPartCFrame():

  • :PivotTo() 根据枢轴来操作,可以配置到对象上最有用的任何参考点,例如门上铰链的位置。
  • :PivotTo() 不需要设置 PrimaryPart。
  • :PivotTo() 使用 BulkMoveTo 结构以及一些其他的内部优化,所以性能比其他方法更优秀。

:PivotTo() 保留部件和模型的偏移量,所以用它来多次移动对象时不会出现浮点量漂移!

模拟与静态模型
我们在上面提到过但没有详细说明“有 PrimaryPart 属性的模型的枢轴与其 PrimaryPart 的枢轴完全一致”这句话,这其实是一个非常值得讨论的话题!为什么我们会把有 PrimaryPart 属性的模型的行为设置成这样?
最需要注意的是没有 PrimaryPart 属性的模型会如何:当这些模型下的部件被单独移动或由于物理模拟而被移动时,这些模型的枢轴会发生什么变化?这些模型的枢轴将会原地不动而不是试图“跟随”模型下的任何部件。

这在编辑时非常有用。如果你有一个静态模型,里面包含着一些关卡的几何模型,你可以在那个模型内移动东西而不用担心打乱枢轴的位置。

但如果你有一个物理模拟的模型的话呢?例如玩家会驾驶到处移动的车辆,而你想让枢轴跟着车辆一起移动?这时就设置 PrimaryPart 吧!因为有 PrimaryPart 属性的模型的枢轴与其 PrimaryPart 的枢轴完全一致,设置 PrimaryPart 等于告诉游戏引擎,当模型移动时枢轴该跟随模型中的哪个部件。

同时,此行为也直接使 :PivotTo 成了 :SetPrimaryPartCFrame 的更好的替代品:有 PrimaryPart 属性的模型的默认枢轴等于 PrimaryPart 的枢轴,在默认情况下也等于此 PrimaryPart 的 CFrame,所以对现有模型来说这两者的行为完全一致。

网格导入
在通过属性面板或虚拟形象导入器插件导入网格时,导入的 MeshParts 的枢轴会被设为你所导入的坐标空间的来源,所以不再会丢失那些 MeshParts 的偏移量信息。注:你只会在 Studio 设置中的“Set Pivot of Imported Parts”(设置导入部件的枢轴)选项为 true 时得到此行为。
使用批量导入器时不会得到此行为,但我们正在改进资源导入流程,并会将此行为延伸到所有导入内容,并提供更加详细的选项。

将来的计划

弃用

  • Model:GetPrimaryPartCFrame 和 Model:SetPrimaryPartCFrame() 将会在近期被弃用。Model:GetPivot() 和 Model:PivotTo() 将作为直接替代品(例如,你可以直接查找替换,将对 SetPrimaryPartCFrame 的调用替换为对 PivotTo 的调用,而无需改变代码的工作方式)。

  • 在发布枢轴 API 的同时,我们也软移除了 Model:SetIdentityOrientation() 和Model:ResetOrientationToIdentity() – 这些函数不再起任何作用。我们已经提前联系了可能受到影响的几位开发者,所以不太会产生明显的影响。

套装 PrimaryPart 要求

在创建套装时需要指定 PrimaryPart 的原因,是在应用更新时提供一个参考点,套装将围绕它进行更新。

可是等一下……枢轴同时也是个参考点,并且每个模型都拥有一个枢轴。我们为什么不能用它们当参考点呢?是的!我们就这么办!我们很快会更新套装,使用枢轴作为参考点而非 PrimaryPart,也就是说我们可以去除之前对 PrimaryPart 的要求。(此更改将向后兼容,原因同 :PivotTo() 作为 :SetPrimaryPartCFrame() 的直接替代品)

常见问题

我能关掉枢轴指示器吗?

  • 目前我们决定不提供关闭的方式,因为我们认为只在你选择了使用它的工具时才显示不够直观。不过我们愿意听取这方面的反馈意见。

:SetPrimaryPartCFrame() 是否会被移除?

  • 不。弃用不代表被移除,弃用通常是将人们从旧 API 指向更好的现代替代品的标准方式。所有已弃用的 API 都会一如既往起作用,以便支持旧版脚本。而在很罕见的情况下我们确实会移除 API,届时我们一定会提前通知受影响的开发者们。

源位置/朝向属性为什么不可编写?

  • 你使用 Lua 代码中的 GetPivot 和 PivotTo 来移动对象。我们使用这些方法而不是属性的原因,是因为在 Roblox 引擎中从 Lua 改变属性应该是简单的独立操作,但移动模型需要设置许多对象的许多属性。所以用方法比属性更合适。

能否回到以前的多重选择枢轴放置?

  • 在测试早期,我们将多重选择的枢轴设为最近选择的对象的枢轴。后来我们改为多重选择的对象的边界中心点。如果你喜欢早期的版本,请告诉我们,我们将来可以把它添加为一个选项。

我能把移动手柄移回对象的边缘上吗?

  • 先试试手柄召唤吧!目前我们得到的反馈显示,手柄召唤功能在改进编辑效率方面非常成功,无需将移动手柄放在对象的边缘。

设置导入部件的枢轴功能怎么了,好像没了啊!

这个功能还在,只是目前成了一个默认关闭的选项。在 Studio 设置中将“Set Pivot of Imported Parts”(设置导入部件的枢轴)选项设为 true 即可启用。将来在统一的资源导入过程中,它将默认以一种更加可配置的形式回归。

结语
如果你一直读到这里,感谢你耐心地读完了这篇过长的公告,也感谢 @tnavarts@LuckyKobold@wengawenga@4thchamber@JoshSedai 在开发此功能方面所作的贡献。

3 个赞

如果能切换移动坐标的移动方式,是 按照局部坐标 还是世界坐标 就好了

1 个赞
关于我们    加入我们    条款    隐私政策
©2021 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。
粤ICP备20013629号