移动对象是指在3D空间内沿一个或多个轴移动的对象。利用Roblox内置的仿真引擎的强大功能,您可以使对象移动并与环境互动,以模仿现实世界中的物理行为,这些行为对于玩家来说是熟悉且直观的,例如重力、空气动力学和摩擦。
本教程以移动对象 .rbxl 文件为参考,解释了物理力如何影响Studio中的线性运动,并展示了在您的体验中以不同的运动行为将对象从点A移动到点B的各种技术,包括:
- 使用 LinearVelocity 移动约束以恒定线速度移动整个组件。
- 使用 PrismaticConstraint 将组件限制到单个轴并相对于3D空间中的点以恒定线速度移动。
- 使用 ApplyImpulse 方法以初始冲量推动一个组件,使得组件随着时间的推移逐渐减速。
线性运动与物理力
Roblox Studio是一个模拟现实世界物理行为的引擎,实时模拟,因此为了预测线性移动的对象在体验中的行为,了解真实世界中对象的线性运动方式至关重要。
线性运动是沿某个轴的运动。例如,当一个方块进行线性运动时,它沿着一个指定的轴移动。

线性运动无法在没有外部物理力推或拉对象的情况下存在。根据牛顿的第一运动定律,静止的物体将保持静止,而移动的物体将在没有外部力量作用的情况下以恒定速度保持运动。例如,一个静止的方块将保持静止,除非有像风这样的物理力量将其推移。
力是物理推动或拉动的方向和大小的量度,导致对象沿着一个轴改变其线性速度。速度的改变称为加速度。这个概念对于Studio中的对象移动特别重要;您施加的力越大,物体加速的速度就越快。
这是因为力需大于任何抵消对象的物理力量,例如重力或摩擦。例如,如果您将方块放在金属板上,风的物理力量需要克服金属板的摩擦力才能继续加速方块。如果风的力量并没有大于金属板的摩擦力,方块会加速,但速度会慢于前面的示例。

线性速度是物体运动的度量,或者说物体沿着一个轴在一段时间内多快改变其位置。Studio根据对象每秒移动多少个Stud来测量线性速度。Stud是Roblox测量长度的主要物理单位,每个Stud相当于现实世界中的约28厘米。

理解线性速度对于在您的体验中设计游戏玩法至关重要,因为它有助于确定您需要施加多少力量,以便让移动对象达到特定速度。例如,当您想将对象向上推时,考虑如何调整您的力以克服环境中的重力,使对象准确移动是非常重要的。
接下来的各部分将深入探讨这些概念,您将学习如何以恒定或初始线性速度移动物体,并施加必要的力以克服环境中任何对立物理力量。当您审视这些物理概念及即将呈现的技术时,您将更准确地预测如何调整属性值,以实现Studio中任何理想的线性运动行为。
维持恒定线性速度
为了使一个物体达到并维持恒定的线性速度,它需要一个力来克服使物体减速或保持静止的任何抵消物理力量。例如,如果您希望一个物体在Studio中以线性速度[0, 12, 0]移动,您需要施加足够的力量,使该物体在Y轴上达到并维持每秒12个Stud。
所需的力量不光依赖于环境内的抵消物理力量,比如重力和摩擦,还依赖于物体本身。例如,如果您有两个相同形状的物体在同一轴上移动,质量更大的物体需要更多的力量才能实现相同的线性加速度。
接下来的小节使用不同形状和大小的组件来教您如何以恒定的线性速度移动整个物体或仅移动物体的一部分。在您尝试不同属性值的过程中,您将学习如何估算在自己的体验中组件所需的最大力量。
使用LinearVelocity约束
LinearVelocity对象是一种移动约束,它施加力于整个组件以维持恒定的线性速度。通过在运动过程中不将组件的位置锁定到某一轴,组件可以在与其他3D空间中的物体碰撞时自由旋转。这种运动方式导致了出人意料的游戏情景,使玩家更难以预测。
要开始移动组件,LinearVelocity约束需要知道:
- 应施加力的点及正向或负向方向。
- 您希望组件每秒移动的Stud数。
- 引擎施加的最大力量,以使组件达到恒定线性速度。
为了演示此过程,您将配置一个睡莲垫,其附加物引用一个LinearVelocity约束,以使睡莲垫沿世界的负X轴以恒定线速度移动15个Stud。

添加附加物
您可以通过向组件添加一个Attachment对象来指定施加力的点,然后在3D空间中配置附加物的位置。示例移动对象体验将一个附加物放置在睡莲垫的中心,以便约束可以从附加物沿特定轴移动网格。
附加物包括视觉辅助,以帮助您可视化其运动轴。黄色箭头表示附加物的主要轴,橙色箭头表示附加物的次要轴。虽然在本技术步骤中任何运动轴都不会影响睡莲垫的移动,但了解这些视觉辅助对于将来的参考非常重要,因为它们可以帮助您确定不同类型约束(例如下一节中的PrismaticConstraint)的理想行为。

要添加附加物:
在资源管理器窗口中,展开LinearVelocityExample文件夹,然后展开其子文件夹LilyPad_DIY模型。
向Pad网格插入一个附加物。
- 将鼠标悬停在网格上,然后点击⊕按钮。上下文菜单会显示。
- 从菜单中插入一个附加物。该附加物显示在部件中心。
- 将附加物重命名为MoveAttachment。

配置约束
现在,您的网格有了固定点来移动睡莲垫,您可以配置LinearVelocity约束的属性,以指定恒定线性速度的方向和大小,您希望网格每秒移动的Stud数,以及引擎可以施加的最大力量,以使网格达到恒定的线性速度。
示例移动对象体验施加最多5000 Rowtons的恒定力使睡莲垫以恒定线性速度沿世界的负X轴移动每秒15个Stud。Rowtons是Roblox测量力的主要物理单位。有关Roblox物理单位及其与公制单位的转换方式,请参见Roblox单位。
要配置LinearVelocity约束:
从Studio的视图菜单中启用显示约束详细信息,以使约束在视口中可见,以便您可以参考其线性方向。
向Pad网格插入一个LinearVelocity约束。
- 在资源管理器窗口中,将鼠标悬停在网格上,然后点击⊕图标。上下文菜单会显示。
- 从上下文菜单中插入LinearVelocity。
将网格的附加物分配给新约束。
- 在资源管理器窗口中,选择该约束。
- 在属性窗口中,
- 将Attachment0设置为MoveAttachment。
- 将MaxForce设置为5000以施加最多5000 Rowtons的恒定力,以实现目标线性速度。
- 将RelativeTo保持为World以使睡莲垫相对于世界的位置和方向移动。
- 将VelocityConstraint设置为Line以沿着从附加物的线约束力。
- 将LineDirection设置为-1, 0, 0以沿着世界的负X轴移动睡莲垫。请注意,如果您将此属性设置为1, 0, 0,则睡莲垫将沿世界的正X轴移动。
- 将LineVelocity设置为15以使睡莲垫每秒移动15个Stud。

验证您设定的力量使网格沿世界的负X轴每秒移动15个Stud。
从夹层的下拉菜单中选择运行仿真模式,然后点击播放按钮以开始。Studio在当前摄像机位置模拟体验,而不需要您的角色在3D空间中。

使用PrismaticConstraint约束
PrismaticConstraint对象是一种机械约束,它在两个附加物之间创建一个刚性连接,使它们的父组件能够相对彼此沿一个轴移动。通过将两个组件的位置锁定到一个单一轴,每个组件只能在相同方向旋转时一起旋转。
这种运动方式导致稳定的游戏场景,使玩家更容易预测。例如,示例移动对象体验利用PrismaticConstraint对象移动木头平台,玩家可以小心地穿过一条巨大的河流。
当您将PrismaticConstraint.ActuatorType设置为电机时,此约束将在两个附加物之间施加力量,目的是让附加物达到并维持恒定的线性速度。如果您将一个附加物的父组件固定,该力将继续使未固定的组件以恒定线性速度移动,而固定的组件保持静止。
要开始移动组件,PrismaticConstraint约束需要知道:
- 应施加力的点及正向或负向方向。
- 您希望附加物每秒移动的Stud数。
- 引擎施加的最大力量,以使附加物及其父组件达到恒定线性速度。
为了演示这一过程,您将配置一个木头组件,其中有两个对象具有子附加物,这些附加物由一个PrismaticConstraint引用,以使木头以恒定线性速度沿着世界的负X轴移动40个Stud每秒。

配置附加物
您可以通过向组件添加两个Attachment对象来指定在组件中移动特定对象的方向,然后在3D空间中配置它们的对齐和朝向。示例移动对象体验将两个附加物对齐到世界的X轴,并在未固定的木头与固定的部分重叠的位置附近,并使每个附加物的主要轴朝向世界的负X轴。
当您在下一节中配置PrismaticConstraint约束时,它将相对于没有移动能力的固定部分来移动木头。换句话说,木头将从不能移动的固定部分移开。
要为棱柱约束配置附加物:
在资源管理器窗口中,展开PrismaticConstraintExample文件夹,然后展开其子文件夹Log_DIY模型。
向Log网格插入一个附加物。
- 将鼠标悬停在网格上,然后点击⊕按钮。上下文菜单会显示。
- 从菜单中插入一个附加物。该附加物显示在部件中心。
- 将附加物重命名为LogAttachment。

使用相同的过程,在Anchor部分插入一个附加物,然后将该附加物重命名为AnchorAttachment。

使用视图选择器工具作为世界坐标的参考,旋转LogAttachment和AnchorAttachment,直到每个附加物的主要轴朝向世界的负X轴

重新定位AnchorAttachment,使两个附加物在世界的X轴上对齐。

配置约束
现在,您的附加物在同一轴上对齐并朝向您希望木头移动的方向,您可以配置PrismaticConstraint约束的属性,以指定是在各附加物主要轴的正或负方向施加目标恒定线速度、您希望附加物每秒移动的Stud数,以及引擎施加的最大力量,以使木头达到恒定线性速度。
虽然您可以为自己的用例选择不同的值,但示例移动对象体验施加最多50000 Rowtons的恒定力,使附加物以恒定线性速度沿世界的负X轴以40个Stud每秒移动。然而,由于锚点附加物在一个固定物体中,因此只有木头的附加物可以移动。
要配置棱柱约束:
向Log网格插入一个PrismaticConstraint对象。
- 在资源管理器窗口中,将鼠标悬停在网格上,然后点击⊕图标。上下文菜单会显示。
- 从上下文菜单中插入一个PrismaticConstraint。
将木头的附加物分配给新约束,以便木头相对于固定块部分移动。
- 在资源管理器窗口中,选择该约束。
- 在属性窗口中,
- 将Attachment0设置为AnchorAttachment。
- 将Attachment1设置为LogAttachment。约束在视口中显示。

在资源管理器窗口中,选择该约束,然后在属性窗口中:
- 将ActuatorType设置为Motor。新的属性字段会显示。
- 将MotorMaxForce设置为50000以施加最多50000 Rowtons的恒定力,以实现目标线速度。
- 将Velocity设置为40以使木头每秒移动40个Stud。

验证您设定的力量使木头沿世界的负X轴每秒移动40个Stud。
从夹层的下拉菜单中选择运行仿真模式,然后点击播放按钮以开始。Studio在当前摄像机位置模拟体验,而不需要您的角色在3D空间中。

应用初始线性力
改变物体线性速度的另一种方式是施加冲量。施加冲量后,物体在存在摩擦等抵消力的情况下会减速直至静止,或者在没有抵消力的情况下保持恒定线速度。
这种技术在经历显著的游戏事件后移动物体非常有用,比如爆炸或重大碰撞,因为它提供了即时的反馈。为了演示,以下小节教您如何在玩家与跳跃垫发生碰撞时向上发射玩家角色,施加初始冲量,您可以通过新值进行调整,以满足自己的游戏要求。
使用ApplyImpulse
ApplyImpulse方法对整个组件施加力以获得初始线速度,在存在抵消力的情况下它将减速至停止。要开始移动组件,该方法需要知道:
- 要移动的组件。
- 应施加力的轴以达到初始线速度。
- 施加到每个轴的力量大小。
您可以在脚本中定义所有这些值。例如,示例脚本将要移动的组件定义为玩家角色的Humanoid对象,然后施加2500 Rowton-秒的冲量以在世界的正Y轴上将玩家向上发射。请注意,玩家角色的质量不同,因此您可能需要增加并平衡该力量,以便发射每个玩家,而不会将质量较小的玩家角色发射得太高。
要使用ApplyImpulse移动组件:
在资源管理器窗口中,展开ApplyImpulseExample文件夹,然后展开其子文件夹JumpPad_DIY模型。
向JumpPad部分插入一个脚本。
- 将鼠标悬停在部件上,然后点击⊕按钮。上下文菜单会显示。
- 从菜单中插入一个脚本。附加物显示在部件中心。
- 将脚本重命名为JumpScript。
用以下代码替换默认代码:
local volume = script.Parentlocal function onTouched(other)local impulse = Vector3.new(0, 2500, 0)local character = other.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and other.Name == "LeftFoot" thenother:ApplyImpulse(impulse)endendvolume.Touched:Connect(onTouched)