旋转物体是在三维空间中围绕一个或多个轴旋转的物体。利用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 对象来指定旋转组件的固定点,然后配置附件在三维空间中的位置。示例旋转物体游戏在一个块部件的中心放置一个附件,以便约束可以使部件围绕其中心逆时针旋转。
附件包括视觉辅助工具,帮助您可视化它们的旋转轴。黄色箭头表示附件的主要轴,橙色箭头表示附件的次要轴。虽然在本技术的步骤中,任何旋转轴都不会影响块的旋转,但理解这些视觉辅助工具对于将来的参考非常重要,因为它们可以帮助您确定不同类型约束的理想行为,例如下一个技术中的 HingeConstraint。

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

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

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

验证您设置的扭矩使块沿世界的Y轴以6弧度每秒旋转。
从夹层的下拉菜单中选择 Run 模拟模式,然后单击 Play 按钮开始。Studio在当前相机位置模拟游戏,而没有您的角色在三维空间中。

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

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

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

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

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

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

将 BaseAttachment 移动到 Base 的顶部,将 HeadAttachment 移动到 Propeller 的底边。这告诉Studio在运行时连接铰链本身,并重叠两个附件。

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

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

验证您设置的扭矩使螺旋桨沿Y轴以3弧度每秒旋转。
从夹层的下拉菜单中选择 Run 模拟模式,然后单击 Play 按钮开始。Studio在当前相机位置模拟游戏,而没有您的角色在三维空间中。

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

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