旋转物体是在三维空间中围绕一个或多个轴旋转的物体。利用 Roblox 的仿真引擎内置的功能,您可以让物体旋转并与它们的环境进行互动,以一种模拟现实世界物理行为的方式,这对于玩家来说是熟悉和直观的,例如重力、空气动力学和摩擦力。
使用 旋转物体 .rbxl 文件作为参考,本教程解释了物理力如何影响 Studio 中的角动量,并向您展示如何使用不同的旋转行为在体验中旋转物体的各种技术,包括指导:
- 使用 AngularVelocity 力移动约束以恒定角速度旋转整个组件。
- 使用 HingeConstraint 机械约束以恒定角速度在组件内旋转一个部件,而其余组件保持静止。
- 使用 ApplyAngularImpulse 方法以初始角力冲量旋转组件,使组件随时间缓慢减速。
角动量和物理力
Roblox Studio 是一个现实世界的仿真引擎,能够实时模拟物理行为,因此为了预测体验中旋转物体的行为,了解物体在现实生活中如何通过角动量旋转非常重要。
角动量,或称旋转运动,是围绕固定点或轴的运动。例如,当螺旋桨具有角动量时,它围绕螺旋桨中间的旋转轴旋转。

角动量的存在离不开外部物理力的推动或拉动物体旋转。根据牛顿的 第一运动定律,静止物体保持静止,运动物体在没有外力作用的情况下继续以恒定速度运动。例如,静止的螺旋桨在没有物理力如风推动其旋转的情况下保持静止。
扭矩是造成物体旋转的物理力的度量,它负责物体获得角加速度。这一概念对于物体在 Studio 中旋转尤其重要;施加给物体的扭矩越大,它们的加速度就越快。
这是因为扭矩需要 大于 施加在物体上的任何方向性的物理力,比如重力或摩擦力。例如,如果您将螺旋桨放在泥土中,则风的物理力需要克服泥土的摩擦力才能继续加速旋转的螺旋桨。如果风的力并没有大于泥土的摩擦力,螺旋桨仍然会旋转,但加速会更慢一些。

角速度是物体旋转速率的度量,或者说物体绕固定点或轴在一段时间内旋转的快慢。Studio 根据物体每秒旋转多少个 弧度 来测量角速度。一个完整旋转有 2π 弧度(6.283),因此为了让一个物体每秒完整旋转一次,它必须具有足够的扭矩以旋转大约 6 个弧度。理解角速度对于设计您体验中的游戏玩法很重要,因为它有助于您确定为实现所需的旋转物体加速度需要多少扭矩。
以下部分将更深入地探讨这些概念,您将在此过程中学习如何以恒定或初始角速度旋转物体,必要的扭矩来克服环境中的任何相对物理力。当您与即将介绍的技术一起复习这些物理概念时,您将能够更准确地预测如何调整属性值,以实现 Studio 中理想的旋转行为。
维持恒定的角力
为了使物体达到并维持恒定的角速度,它需要一个角力以克服任何减缓物体角速度的对抗物理力,或者导致物体保持静止。例如,如果您希望物体在 Studio 中具有 [0, 12, 0] 的角速度,则需要足够的扭矩以使物体达到并保持 Y 轴上 12 弧度每秒的角速度,大约每秒两次完整旋转。
施加给物体的扭矩量不仅取决于环境中存在的对抗物理力,如重力和摩擦,还取决于物体本身。例如,如果您有两个形状相同的物体在同一轴上旋转,较大的物体具有较大的 转动惯量,需要更多的扭矩才能达到相同的角加速度。
以下小节将使用不同形状和大小的组件教您如何旋转整个物体或仅旋转物体的一部分。通过实验不同的属性值,您将学习如何估算您体验中组件所需的最大扭矩。
使用 AngularVelocity 约束
AngularVelocity 对象是一种 移动约束,它施加扭矩在整个组件上以维持恒定的角速度。要开始旋转组件,AngularVelocity 约束需要知道:
- 应用角力的方向和正负方向的点。
- 您希望组件每秒旋转的弧度数。
- 引擎可以施加到组件以达到恒定角速度的最大扭矩量。
为了演示这个过程,您将向工作区添加一个带有附件的方块,AngularVelocity 约束将引用该附件,以使方块沿全球 Y 轴以恒定角速度旋转 6 弧度每秒,约为一次完整的旋转。

添加附件
您可以通过将 Attachment 对象添加到组件中来指定旋转组件的固定点,然后配置附件在 3D 空间中的位置。示例 旋转物体 体验在方块零件的中心放置一个附件,以便约束可以使其围绕自身的中心逆时针旋转。
附件包括视觉辅助工具,以帮助您可视化其旋转轴。黄色箭头表示附件的主轴,橙色箭头表示附件的次轴。尽管本技术中的这两个旋转轴都不会影响方块的旋转,但了解这些视觉辅助工具对于将来的参考是重要的,因为它们可以帮助您确定不同类型约束的理想行为,例如下一项技术中的 HingeConstraint。

要添加附件:
在 Explorer 窗口中,将一个 方块 部件插入 Workspace。

在新部件中插入一个附件。
- 在 Explorer 窗口中,将鼠标悬停在该部件上,然后点击 ⊕ 按钮。上下文菜单显示。
- 从菜单中插入一个 附件。附件显示在部件的中心。
- 将附件重命名为 SpinAttachment。

配置约束
现在方块有了一个固定点来旋转,您可以配置 AngularVelocity 约束的属性,以指定施加目标恒定角速度的旋转方向、轴或轴、您希望方块每秒旋转的弧度数以及引擎可以施加的最大扭矩量,以使方块达到恒定的角速度。
示例 旋转物体 体验将最多 1000 Rowton-studs 的恒定角力施加在方块上,使其每秒以 6 弧度的速度沿全球 Y 轴以恒定的角速度旋转。Rowton-studs 是 Roblox 用于测量扭矩的主要物理单位。有关 Roblox 物理单位及其如何转换为公制单位的信息,请参见 Roblox 单位。
要配置 AngularVelocity 约束:
为了使约束在视口中可见,以便您可以参考其旋转方向,请在 Studio 的 查看 菜单中启用 显示约束详细信息。
在部分中插入一个 AngularVelocity 约束。
- 在 Explorer 窗口中,将鼠标悬停在该部件上,然后点击 ⊕ 图标。上下文菜单显示。
- 从上下文菜单中插入 AngularVelocity。约束的视觉辅助工具显示在部件的中间。
将部件的附件分配给新约束。
- 在 Explorer 窗口中,选择该约束。
- 在 属性 窗口中,
- 将 Attachment0 设置为 SpinAttachment。
- 将 AngularVelocity 设置为 0, 6, 0 以使部件沿 Y 轴以 6 弧度每秒旋转。请注意,如果将该属性设置为 0, -6, 0,则方块将顺时针旋转。
- 将 MaxTorque 设置为 1000,以施加最多 1000 Rowton-studs 的恒定角力每秒,以实现目标角速度。
- 保持 RelativeTo 设置为 World,以相对于世界的位置和方向旋转方块。

验证您设置的扭矩量使方块沿全球 Y 轴以 6 弧度每秒旋转。
从夹层的下拉菜单中选择 运行 模拟模式,然后点击 播放 按钮以开始。Studio 在当前相机位置模拟体验,而不在 3D 空间中包含您的头像。

您可能需要根据方块的缩放和环境中的任何对抗物理力来调整您的扭矩。例如,示例体验中 AngularVelocity 约束的属性适用于大小为 4, 1, 2 的默认尺寸方块,放置在平坦的塑料材质平台上,并且环境具有经典的重力预设。
但是,如果您的方块较大,且位于草地上,则需要增加 AngularVelocity.MaxTorque 属性,因为角力需要克服方块的质量和环境的摩擦力。例如,大小为示例方块四倍的大方块需要至少 300000 Rowton-studs 的恒定角力才能达到设定的角速度!
使用 HingeConstraint 约束
HingeConstraint 对象是一种 机械约束,它允许两个附件围绕一个轴旋转,将附件约束在同一位置并使它们的主轴在同一方向上。当您将 HingeConstraint.ActuatorType 设置为 Motor 时,该约束在两个附件上施加扭矩,目标是使附件达到并维持恒定的角速度。
此外,当您在一个组件中放置两个物体的附件时,物体会锁定在一起,并尝试根据附件的固定主轴一同旋转。如果您将其中一个物体固定,角力仍然会使另一个物体以恒定的角速度旋转,而其余的组件保持静止。
例如,要开始在组件中旋转特定物体,HingeConstraint 约束需要知道:
- 您希望附件重叠的位置。
- 应用角力的方向和正负方向的点。
- 您希望附件每秒旋转的弧度数。
- 引擎可以施加的最大扭矩量,以使附件达到恒定角速度。
为了演示这个过程,您将向工作区添加一个带有两个物体的螺旋桨组件,两个物体上都有附件,HingeConstraint 约束将引用这些附件,使螺旋桨以 3 弧度每秒(约每秒半圈)沿 Y 轴以恒定角速度旋转,而螺旋桨的底座保持静止。

获取螺旋桨资产
创作者商店是 工具箱 的一个标签,您可以在其中寻找由 Roblox 及 Roblox 社区创建的所有资产以在项目中使用,包括模型、图像、网格、音频、插件、视频和字体资产。您可以使用创作者商店将单个资产或资产库直接添加到一个打开的体验中。
本教程引用了一个您可以在复制 HingeConstraint 旋转物体技术的每一步时使用的螺旋桨模型。要将此螺旋桨资产从您的库存添加到您的体验中:
将螺旋桨添加到您的库存中。
- 转到资产的 详细信息页面 在创作者商店中。
- 在右上角,单击 获取模型 按钮。螺旋桨资产现已添加到您的库存,您可以在平台上的任何项目中重复使用它。
在 Studio 中,转到 主页 选项卡,然后单击 工具箱 按钮。工具箱 窗口打开。

在 工具箱 窗口中,单击 库存 选项卡。我的模型 分类显示。

单击 螺旋桨 瓦片。模型在您的视口中显示。

配置附件
您可以通过在组件中添加两个 Attachment 对象来指定您希望附件重叠的位置和旋转运动的方向,然后在 3D 空间中配置它们的对齐和方向。
示例 旋转物体 体验将两个附件对齐在未固定的螺旋桨与固定的底座重叠的位置附近,并将它们的主旋转轴朝上,以便它们逆时针旋转。在这个示例中,底座附件无法旋转,因为底座是固定的。
要为铰链约束配置附件:
在 头部 和 底座 中插入一个 Attachment 对象。
- 在 Explorer 窗口中,将鼠标悬停在 头部 上,然后点击 ⊕ 按钮。上下文菜单显示。
- 从菜单中插入一个 附件。
- 对 底座 重复此过程。
- 将两个附件分别重命名为 HeadAttachment 和 BaseAttachment。

旋转 HeadAttachment 和 BaseAttachment,使每个附件的主轴向上指向 Y 轴。这告诉 Studio 使附件逆时针旋转。

将 BaseAttachment 移动到 底座 的顶部,将 HeadAttachment 移动到 螺旋桨 的底边。这告诉 Studio 确定铰链自身的位置,并在运行时重叠两个附件。

配置约束
现在您的附件有了重叠的位置和旋转运动的方向,您可以配置 HingeConstraint 约束的属性,以指定您希望附件每秒旋转的弧度数,以及引擎可以施加的最大扭矩量,以使附件达到恒定的角速度。
与前一技术类似,示例 旋转物体 体验施加最多 1000 Rowton-studs 的恒定角力,使附件以恒定角速度沿 Y 轴以 3 弧度的速度旋转。然而,由于底座附件位于固定的物体中,只有螺旋桨的附件可以旋转。
要配置铰链约束:
在 头部 中插入一个 HingeConstraint 对象。
- 在 Explorer 窗口中,将鼠标悬停在 头部 上,然后点击 ⊕ 图标。上下文菜单显示。
- 从上下文菜单中插入一个 HingeConstraint。
将螺旋桨的附件分配给新约束,以便螺旋桨相对于固定的底座旋转。
- 在 Explorer 窗口中,选择该约束。
- 在 属性 窗口中,
- 将 Attachment0 设置为 BaseAttachment。
- 将 Attachment1 设置为 HeadAttachment。铰链在视口中显示。

在 Explorer 窗口中,选择该约束,然后在 属性 窗口中,
- 将 ActuatorType 设置为 Motor。新的属性字段显示。
- 将 MotorMaxTorque 设置为 1000,以施加最多 1000 Rowton-studs 的恒定角力,以实现目标角速度。
- 将 AngularVelocity 设置为 3,使螺旋桨的头部以 3 弧度每秒旋转。

验证您设置的扭矩量使螺旋桨沿 Y 轴以 3 弧度每秒旋转。
从夹层的下拉菜单中选择 运行 模拟模式,然后点击 播放 按钮以开始。Studio 在当前相机位置模拟体验,而不在 3D 空间中包含您的头像。

施加初始角力
改变物体角速度的另一种方式是施加角力脉冲。施加角力脉冲后,如果存在如摩擦的对抗力,物体将在减速直至静止,或者在没有对抗力的情况下保持恒定速度运动。
此技术对于在重大游戏事件或气象事件后旋转物体非常有用,比如强风,因为它为玩家提供了瞬时的反馈。为了演示,以下小节教您如何旋转一个带有初始随机角力的组件,您可以根据新值进行调整以满足自己的游戏需求。
使用 ApplyAngularImpulse
ApplyAngularImpulse 方法在整个组件上施加扭矩,以获得初始角速度,然后减速至停止。要开始旋转组件,该方法需要知道:
- 要旋转的组件。
- 应用扭矩以达到初始角速度的轴。
- 对每个轴施加的扭矩量。
您可以在脚本中定义所有这些值。例如,示例脚本将要旋转的组件定义为脚本的父级,然后在 Y 轴上施加 0 到 100 Rowton-studs 之间的随机角力脉冲。
要使用 ApplyAngularImpulse 旋转组件:
在 Workspace 中插入一个 球体 部件。示例使用带有 MaterialVariant 的球体,以便您可以清楚地可视化球体的运动。

在新部件中插入一个脚本。
- 在 Explorer 窗口中,将鼠标悬停在该部件上,然后点击 ⊕ 按钮。上下文菜单显示。
- 从菜单中插入一个 脚本。
将默认代码替换为以下代码:
local part = script.Parentlocal impulse = Vector3.new(0, math.random(0, 100), 0)part:ApplyAngularImpulse(impulse)