创建移动对象

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

移动对象 是在 3D 空间中以一个或多个轴上移动的对象。使用 Roblox 的内置力量,您可以使对象移动并与其环境在一种类似于真实世界物理行为的方式进行交互,例如重力、气力和摩擦力。

使用 移动对象 .rbxl 文件作为参考,本教程解释物理力如何在 Studio 中影响直线运动,并显示您在体验不同移动行为时使用不同的移动技术,包括以下技巧:

  • 使用 LinearVelocity 移动限制来移动整个装配体以定向快速速度。
  • 使用 PrismaticConstraint 来限制装配件到一个轴上,并在 3D 空间中的一个点上以相同的直线速度移动。
  • 使用 ApplyImpulse 方法将一个装置移动到使用初始强度的力,以便装置在一段时间内慢慢减速。

直线运动和物理力

Roblox Studio 是一个真实世界的模拟引擎,它以实时模拟物理行为来模拟物体在时间内移动的方式,因此,为了预测物体在体验中以线性方式移动的方式,重要的是要有一个高级的理解,如何在实体在线时间中以线性运动方式移动。 直线运动 是沿轴移动。例如,当块有直线运动时,它将沿设置的轴移动。

A gray block in front of a dark background. The movement axis is highlighted, and it faces toward the left of the screen to signify that the block is going to move along the world's Y axis.

直线运动不能没有外部的物理力推动或拉动对象来移移动工具。 根据牛顿的第一法律运动,静止对象仍然静止,移动对象仍然在移动速度不变的情况下,除非被外部力量作用,否则仍然在运动中。 例如,一个静止的方块仍然静止,除非被外部的力量作用,否则仍然在运移动工具中。

力量力量是物体沿轴变化直线速度的力道和大小的测量。 速度变化被称为 加速。 这个概念对于对象在 Studio 中移动非常重要; 你所应用的力量越多,对象的速度加速就越快。

这是因为力必须大于任何物理力,例如重力或摩擦。 例如,如果您将块放在金属板上,风的物理力必须克服金属板的摩擦力才能继续加速砖块。如果风的力量不大于金属板的摩擦力,风的速度会很慢,就像上一例一样。 如果风的力量不大于金属板的摩擦力,风的速度会很慢,就像上

A gray block in front of a dark grey metal plate with a diagram that signifies the block will have a plate friction to slow the block's movement from the wind.

直线速度 是对对象的移动的测量,或者对象在一段时间内沿轴变更位置的速度。Studio 按照对象每秒移动的速度测量直线速度,使用单位称为 Roblox 的主要物理单位来测量长度。每个单位的长度都相当于 28cm 在实际世界中。

A gray block in front of the default baseplate's 4x4 grid texture. A single stud cube rectangle is highlighted.

了解线性速度对于设计游戏体验中的游戏玩法很重要,因为它可以帮助您确定您需要的力量来实现特定速度对您的移动对象的要求。例实例,当您想要向上推动对象时,您必须考虑如何调整您的力量以克服重力在环境中的移动。

下面的部分涵盖了这些概念,随着您学习如何在任何速度或力场速度下移动对象以实现在环境中任何对线性物理力的挑战,您可以更好地预测如何调整属性值以实现 Studio 中的任何理想的线性移动行为。当您使用即将推出的技术查看这些物理概念时,您可以更好地预测如何调整属性值以实现 Studio 中的任何理想的线性移动行为。

保持一致的直线速度

要使对象达到并保持一致的直线速度,它需要一个力量来克服任何会影响对象直线速度的反向物理力或使对象保持静止的物理力。例如,如果您想要在 Studio 中使对象具有 [0, 12, 0] 的直线速度,您需要足够的力量才能在 Y 轴上的 12 个格环境上每秒钟产

力的量不仅仅取决于环境内的物理力量,例如重力和摩擦,还取决于对象本身。例如,如果您有两个相同形状的对象在同一轴上移动,那个拥有更大质量的对象需要更多的力来实现相同的直线加速。

小三角形部件的质量小,所以它需要较小的力量才能实现同样的加速。
大型三角形部件的质量很高,所以需要更大的力量来实现相同的加速。

下面的子部分使用不同形状和大小的组合来教你如何将整个对象或仅部分对象移动在常定直线速度下。随着你在不同的属性值上实验,你会学会估算你需要对象组合的最大力量。

使用 LinearVelocity 限制

LinearVelocity 对象是一个类型的 移动限制器 ,它在整个装置上施加力以保持一致的直线速度。通过将装置的位置锁定在轴上,在移动时自由旋转,这类移动会导致玩家预测的游戏场景更难。此类移动会导致惊人的游戏场景,因为玩家与 3D 空间中的其他对

随着莲花垫与一起碰撞,它们改变了方向,但仍然在河流上以一致的直线速度流下。

要开始移动装配,LinearVelocity 限制需要知道:

  • 指向和正向或负向应用力。
  • 你想要的装配每秒移动的螺柱数量。
  • 引擎可以为装配达到常量直线速度的最大力量。

要示示此过程,您将配置一个莉莉发射台,配有一个 LinearVelocity 约束参考,以移动莉莉发射台 15 每秒以正确的线性速度沿世界的负 X 轴上的 1 格子。

A close up view of a lily pad. The lily pad's constraint visual aid is visible, and it points to the right, which is the world's negative X axis.

添加附件

您可以通过将 Attachment 对象添加到装配体,然后配置附件位置在 3D 空间中来指定要应用的力,例如将 Class.附件 添加到装配体中,然后配置附件的位置在 3D 空间中。 样例 移动对象 体验将附件放置在中心的莉莉花垫上,以便约束可以将网格从附件沿特定轴移动

附件包括视觉帮助,可以帮助您视觉化其轴的运动。 黄色箭头表示附件的主轴, 橙色箭头表示附件的副轴。 尽管这种技术的步骤不会影响 лилия边距的移动,但您仍然应该了解这些视觉帮助,因为它们可以助您确定理想的行为 для不同类型的限制

A attachment's visual aid arrows. The yellow arrow that signfies the attachment's primary axis points up, and the orange arrow that signfies the attachment's secondary axis points to the right.

要添加附件:

  1. 探险者 窗口中,扩展 线性速度示例 文件夹,然后扩展其子 LilyPad_DIY 模型。

  2. 将附件插入 Pad 网格。

    1. 将鼠标悬停在网格上,单击⊕按钮。一个上下文菜单显示。
    2. 从菜单中,插入一个 附件 。 该附件显示在零件的中心。
    3. 将附件命名为 移动附件
    A close up view of a lily pad and its attachment visual aid. The primary axis points away from the camera, and the secondary axis points upward.

配置限制

现在您的网格有一个固定点来移动百合花边距,您可以配置 LinearVelocity 约束的属性来指定方向和大小对于常量直线速度,您想要网格每秒移动的速度和网格最大力量。

示例 移动对象 体验适用于 5000 行驶力,每秒以 15 个方向向世界的负 X 轴上的世界中的每个平方英里以实现移动莉莉垫。行驶力是 Roblox 的主要物理单位,用于测量力的测量。要引用 Roblox 物理单位并如何将其转换为 метри单位,请参阅 Roblox

要配置 LinearVelocity 约束:

  1. (可选) 在 3D 空间中使约束可见,以便您可以参考其直线方向。

    1. 在菜单栏中,导航到模型标签,然后到限制部分。
    2. 如果它未启用,请单击 限制详情 显示限制视觉助助。
    A close up view of the Studio's Constraints section UI.
  2. LinearVelocity 约束插入 Pad 网格。

    1. 在 Explorer 窗口中,将鼠标悬停在网格上,然后单击 ⊕ 标志。一个上下文菜单显示。
    2. 从上下文菜单中,插入 线性速度
  3. 将网格的附件分配到新的约束。

    1. Explorer 窗口中,选择限约束。
    2. 属性 窗口中,
      1. 附件0 设置为 移动附件 .
      2. MaxForce 设置为 5000 以应用最多 5000 行驶速度。
      3. 相对于 保持到 世界 以将百合发垫相对于世界的位置和方向。
      4. 速度约束 设置为 线 以在附件上从线路上限制力。
      5. 线向 设置为-1, 0, 0以移动世界的负向X轴上的百合垫。注意,如果您将此属性设置为1, 0, 0,百合垫将在世界的正向X轴上移动。
      6. 将 线速度设置为 15 以每秒移动百合垫 15 格。
    A close up view of a lily pad and its constraint visual aid arrow that points to the right, or the world's negative X axis.
  4. 验证您设置的力量以及其它移动参数在世界的负 X 轴上每秒移动 15 格子。

    1. 在菜单栏中,导航到 测试 选项卡。

    2. 模拟 部分中,单击模式选择器。一个下拉菜单显示。

      Rapid playtest options in Test tab of Studio
    3. 选择 运行 。 Studio 在 3D 空间中无需你的虚拟形象在当前摄像头位置就可以模拟体验。

使用棱镜约束限制

PrismaticConstraint 对象是一个类型的机械限制,它们创建一个刚性关联,使其父子组合能够在一个轴上 相对于其他 方向移动。 通过锁定两个组合的位置到一个轴上,每个组合只能旋转,如果它们在同一个方向上旋转,旋转0>父子组合0>。

这种移动会导致更容易让玩家预测的稳定游戏场景。例如,示例 移动对象 体验使用 PrismaticConstraint 对象移动木平台,玩家可以使用它们来慎重穿越巨大河流。

当您将 PrismaticConstraint.ActuatorType 设置为 机器 时,此约束在两个附件上施加力,以实现附件之间的直线速度。如果您将一个附件的父组装件作为锚定,那么力将继续将未锚定的组装件在直线速度上移动,而锚定的组装件将保持不变。

要开始移动装配,限制 PrismaticConstraint 必须知道:

  • 指向和正向或负向应用力。
  • 你想要的附件移动每秒的学问。
  • 引子和其父子组合体可以实现一致的直线速度,该引子的最大力量为 。

要示示此过程,您将配置一个由两个具有子对象的树形结构,其中一个具有子对象的子对象,其余一个具有子对象的子对象,以便以一致的速度每秒移动世界的负 X 轴上的 40 个子弹。

A close up view of a brown log on top of a river. The log's constraint visual aid is visible and points to the right, or the world's negative X axis.

配置附件

您可以通过将两个 Attachment 对象添加到装配中,然后配置其对齐和方向在 3D 空间中,来指定一个特定对象在装配中的方向。 样例 移动对象 体验将两个附件沿世界 X 轴的位置添加到装配中,并配置其对齐和方向在 3D 空间中

在下一节中配置您的PrismaticConstraint约束时,它将将木头 在相对位置 移动到锚定部分。 其他 话,木头会从不移动的固定位置移动到3D空间。

要配置对棱镜限约束的附件:

  1. Explorer 窗口中,扩展 PrismaticConstraintExample 文件夹,然后扩展其子 Log_DIY 模型。

  2. 将附件插入 树状网格

    1. 将鼠标悬停在网格上,单击⊕按钮。一个上下文菜单显示。
    2. 从菜单中,插入一个 附件 。 该附件显示在零件的中心。
    3. 将附件命名为 日志附件
    A close up view of a log and its attachment visual aid. The primary axis points toward the camera, and the secondary axis points upward.
  3. 使用同一个过程,将附件插入 锚定 部件,然后重命名附件为 锚定附件

    A close up view of a log and two attachment visual aids. The primary axis of the new attachment visual aid points to the right, and the secondary axis points upward.
  4. 使用 视图选择器 工具作为世界坐标的参考,旋转 LogAttachmentAnchorAttachment 直到每个附件的主轴面向世界的负 X 轴

    A close up view of a log and its attachment visual aid. Both attachments have a primary axis that points to the right, and a secondary axis that points upward.
  5. 重新定位 锚定附件 ,以便两个附件都在世界的 X 轴上对齐。

    A close up view of a log and its attachment visual aids that are now positioned horizontally. Both attachments have a primary axis that points to the right, and a secondary axis that points upward.

配置限制

现在您的附件都对齐在同一轴上,面向您想要的方向,您可以配置 PrismaticConstraint 约束来指定要应用的目标常量直线速度在正向或负向的每个附件的主轴上的移动工具动方向,以及您想要的附件每秒移动的速度,以及引擎可以应用的最大力。

虽然您可以为自己的使用场景选择不同的值,但示例 移动对象 体验适用最多 50000 行驶力以移动附件 40 每秒以负 X 轴上的世界的负向速度。 但因为锚定对象的附件在锚定对象上,只有锚定对象的附件才能移移动工具。

要配置棱镜约束:

  1. PrismaticConstraint 对象插入 日志 网格。

    1. 在 Explorer 窗口中,将鼠标悬停在网格上,然后单击 ⊕ 标志。一个上下文菜单显示。
    2. 从上下文菜单中,插入一个 棱镜限制 .
  2. 将记录的附件分配到新的约束,以便记录移动到 关系 锚定块部分。

    1. Explorer 窗口中,选择限约束。
    2. 属性 窗口中,
      1. 附件0 设置为 锚定附件
      2. 附件1 设置为 日志附件 。限制显示在视图中。
    A close up view of a log and its constraint visual aid. It doesn't have a arrow visual aid because it doesn't yet have a set velocity.
  3. Explorer 窗口中,选择约束,然后在 属性 窗口中,

    1. ActuatorType 设置为 Motor 。显示新的属性字段。
    2. MaxForce 设置为 50000 以应用 50000 行驶速度,最大行动力。
    3. 速度 设置为 40 以每秒移动 40 个伐木。
    A close up view of a log and its constraint visual aid arrow that points to the right, or the world's negative X axis.
  4. 验证您设置的力量以及其他力量的大小,可以使世界的负 X 轴上的原木每秒移动 40 个。

    1. 在菜单栏中,导航到 测试 选项卡。

    2. 模拟 部分中,单击模式选择器。一个下拉菜单显示。

      Rapid playtest options in Test tab of Studio.
    3. 选择 运行 。 Studio 在 3D 空间中无需你的虚拟形象在当前摄像头位置就可以模拟体验。

应用初始直线力

另一个更改对象线性速度的方法是应用力的冲击。 在力的冲击后,对象可以减速直到变为静止,如果存在摩擦力等反向力,或者保持在直线速度下,如果没有反向力。

这种技术有助于在重大游戏事件后移动对象,例如爆炸或影响重大的碰撞,因为它提供给玩家即时反馈。 要示例,下面的子部分教你如何向上向天向玩家的角色发射,当他们与你的跳跃平台使用初始踏み出发而进行碰撞。 使用新的价值来满足您的游戏要求的自己的角色。

使用ApplyImpulse

Class.BasePart.ApplyImpulse|ApplyImpulse 方法在整个装配上施加力,以获得在有反向力时减速到停止时实现初始直线速度。要开始移动装配,方法需要知道:

  • 移动工具动的装配。
  • 用于初始直线速度的力量应用轴。
  • 要应用到每个轴的力量。

您可以在脚本中定义所有这些值。例如,示例脚本定义了装配移动为玩家角色的 Humanoid 对象,然后应用 2500 行ton-秒的力推动玩家向上在世界的正向 Y 轴上。 注意,玩家角色的重量会增加,因此您可能需要增加和平衡这种

使用 ApplyImpulse 移动装配:

  1. Explorer 窗口中,扩展 ApplyImpulseExample 文件夹,然后扩展其子 JumpPad_DIY 模型。
  2. 将脚本插入 JumpPad 部分。
    1. 将鼠标悬停在零件上,单击⊕按钮。一个上下文菜单显示。
    2. 从菜单中,插入一个 脚本 。 插件显示在零件的中心。
    3. 将脚本重命名为 JumpScript
  3. 将以下代码替换为默认代验证码:

local volume = script.Parent
local function onTouched(other)
local impulse = Vector3.new(0, 2500, 0)
local character = other.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and other.Name == "LeftFoot" then
other:ApplyImpulse(impulse)
end
end
volume.Touched:Connect(onTouched)