創建移動物件

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

移動物件 是在3D空間內移動在一個或多個軸上的物件。使用 Roblox 模擬引擎內置的力量,您可以以模擬真實世界物理行為熟悉且直觀的方式讓物體移動和與環境互動,例如重力、空氣動力和摩擦。

使用 移動物件.rbxl 檔案作為參考,本教學解釋如何在 Studio 中物理力對線性運動產生影響,並向您展示各種技巧將物件從點 A 移動到點 B,在不同的運動行為中,包括指導如何:

  • 使用 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.

線速度 是對物體運動的測量,或物體在一定時間內沿軸向變更位置的速度。工作室會根據物件每秒移動的距離來測量線速度。螺柱是 Roblox 測量長度的主要物理單位,每個螺柱相當於現實世界的約 28cm。

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

理解線速度對於設計您體驗中的遊戲非常重要,因為它可以幫助您確定需要多少力才能達到特定速度的移動物體。例如,當您想將物件向上推進時,重要的是要考慮如何調整力以克服環境內的重力,使物件準確移動。

以下部分進一步探討這些概念,當您學習如何在恆定或初始線速度下移動物體時,以必要的力量克服環境中的任何反對物理力量。隨著你使用即將到來的技術檢查這些物理概念,你可以更準確地預測如何調整屬性值以實現 Studio 中任何理想的線性運動行為。

維持恆定線速度

要使物件達到並維持恆定的線速,需要一個力量來克服任何反對物件的物理力,使物件的線速下降或使物件保持不動。例如,如果您想要對象以 [0, 12, 0] 的線速度在 Studio 中達到和維持每秒 12 個單位的 Y 軸環境,您需要足夠的力量讓對象沿 Y 軸在環境中每秒達到和維持 12 個單位的速度。

所需的力量不僅取決於環境本身內的反對物理力,例如重力和摩擦力,還取決於對象本身。例如,如果您有兩個相同形狀的物體在同一軸上移動,那麼體積較大的物體需要更多力來實現相同的線速加速。

小三角形部分有少量的質量,因此需要少量的力來達到相同的加速。
大型三角形部分擁有大量質量,因此需要更多力量才能達到相同的加速。

以下子部分使用不同形狀和尺寸的裝配來教你如何以恆定線速度移動整個對象或只有對象的一部分。隨著您使用不同的屬性值進行實驗,您將學習如何估算您在自己的體驗中需要的最大力量。

使用線性速度限制

LinearVelocity 物件是一種類型的 移動限制 ,可以對整個裝配施加力以維持恒定的線速度。由於不將裝配的位置鎖定在軸上,因此在其運動期間,裝配可以自由旋轉,與 3D 空間中的其他物體碰撞時。這種類型的運動會導致驚人的遊戲情節,對玩家來說更難以預測。

當莉莉墊與墊之間碰撞時,它們會改變方向,但仍以恆定的線速度流向河流。

要開始移動組裝,限制 LinearVelocity 需要知道:

  • 應用力的點和正或負方向。
  • 你希望裝配每秒移動的螺柱數量。
  • 引擎可以為裝配達到恆定線速度的最大力量。

為了展示此過程,您將配置一個莉莉墊的附件,引用 LinearVelocity 限制來移動莉莉墊的 15 螺柱每秒沿世界負X軸以恒定線速度在世界上移動。

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 空間中配置附件的位置來配置附件位置。樣本 移動物體 體驗將附件放置在莉莉墊的中心,以便限制從附件沿特定軸移動網格。

附件包括視覺輔助,可幫助您視覺化其運動軸。黃色箭頭表示附件的主軸,橙色箭頭表示附件的次要軸。雖然動作軸不會影響此技巧步驟中莉莉墊的移動,但很重要理解這些視覺輔助工具以作未來參考,因為它們可以幫助您確定不同類型約束的理想行為,例如下一個技巧中的 PrismaticConstraint

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

要添加附件:

  1. 檢索器 窗口中,擴展 線速度範例 文件夾,然後擴展其子 LilyPad_DIY 模型。

  2. 將附件插入 墊子 網格。

    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 限制插入 墊子 網格。

    1. 導航器 窗口中,將鼠標懸停在網格上,然後單擊⊕圖標。一個上下文菜單顯示。
    2. 從上下文選單中插入 線速度
  3. 將網格的附件指派到新限制。

    1. 導航器 窗口中,選擇約束。
    2. 屬性 窗口中,
      1. 附件0 設為 移動附件
      2. 最大力 設為 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. 驗證你設置的力量會將網格每秒移動 15 個單位沿世界負 X 軸。

    1. 在工具欄中,導航到 測試 標籤。
    2. 從遊戲測試模式中選擇 執行 。Studio 在當前攝影機位置模擬體驗,而且沒有你的虛擬人偶在 3D 空間中。
    Rapid playtest options in Studio.

使用棱鏡約束限制

PrismaticConstraint 物件是一種機械限制,可以在兩個附件之間創建剛性聯節,讓其父集裝可以沿著一個軸向相對於彼此移動 相對於每個附件 。將兩個裝配的位置鎖定在單一軸上,每個裝配只能在同一方向上一起旋轉,如果它們一起旋轉。

這種類型的運動會導致更容易預測的穩定遊戲場景。例如,樣本 移動物件 體驗使用 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 軸向位置移動,並將每個附件的主軸向世界的負 X 軸轉向。

當您在下一個部分配置您的PrismaticConstraint限制時,它會將日誌 關聯 移至錨定部分。換言之,日誌將從固定的部分移開,因為它被錨定在 3D 空間中。

若要配置棱鏡限制的附件:

  1. 探索器 窗口中,擴展 棱鏡約束範例 文件夾,然後擴展其子 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 牛頓的恆定力,以每秒在世界負X軸上以恆定線速度移動附件40度。然而,因為錨定附件位於錨定對象中,只有日誌附件才能移動。

要配置棱鏡限制:

  1. PrismaticConstraint 物件插入 記錄 網格。

    1. 導航器 窗口中,將鼠標懸停在網格上,然後單擊⊕圖標。一個上下文菜單顯示。
    2. 從上下文選單中插入 棱鏡限制
  2. 將日誌的附件指派到新限制,以便日誌在 關係到 錨定的方塊部分移動。

    1. 導航器 窗口中,選擇約束。
    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. 導航器 窗口中,選擇約束,然後在屬性窗口中,

    1. 執行器類型 設為 馬達 。新的屬性字段顯示。
    2. 引擎最大力 設為 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. 從遊戲測試模式中選擇 執行 。Studio 在當前攝影機位置模擬體驗,而且沒有你的虛擬人偶在 3D 空間中。
    Rapid playtest options in Studio.

應用初始線性力

將對象的線速度變更為另一種方式是應用力的脈衝。在力的脈沖之後,物體會減速直到變得靜止,如果存在磨擦力等反向力,或者在沒有反向力的情況下保持恒定的線速度。

這個技巧在爆炸或具有影響力的碰撞等重大遊戲事件之後移動對象時有用,因為它為玩家提供即時反饋。為了說明,下列子部分教你如何將玩家的角色向天空發射,當它們與跳躍板碰撞時,你可以使用新值來適應你自己的遊戲需求。

使用 ApplyImpulse

方法對整個裝配施加力,在有反對力時減速到停止之前獲得初始線速度。要開始移動組裝,方法需要知道:

  • 要移動的裝配。
  • 用於施加力以達到初始線速度的軸。
  • 應用於每個軸的力量數量。

您可以在腳本中定義所有這些值。例如,樣本腳本定義將組件移動為玩家角色的 Humanoid 對象,然後應用 2500 行頓秒的力脈來向世界的正向 Y 軸發射玩家。請注意,玩家角色的質量數量不同,因此您可能需要增加並平衡這種力量,以發射每個玩家,而不是發射更少質量的玩家角色太高。

要使用 ApplyImpulse 移動裝配:

  1. 探索器 窗口中,擴展 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)