創建移動物體

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

移動物體是指在3D空間中沿著一個或多個軸移動的物體。利用Roblox模擬引擎的內建能力,您可以使物體進行運動,並與它們的環境進行互動,模擬現實世界中玩家熟悉的直觀物理行為,如重力、空氣動力學和摩擦。

使用 Moving Objects .rbxl 文件作為參考,本教程解釋了物理力量如何影響Studio中的線性運動,並展示了多種技術,教您如何在經歷中將物體從A點移動到B點,並包括不同的運動行為的指導,包括:

  • 使用 LinearVelocity 移動約束以恆定的線性速度移動整個組件。
  • 使用 PrismaticConstraint 將組件限制在單一軸上,並以相對於3D空間中某一點的恆定線性速度移動。
  • 使用 ApplyImpulse 方法以初始的力量脈衝移動組件,使其隨著時間的推移緩慢減速。

線性運動和物理力量

Roblox Studio 是一個實時模擬現實世界物理行為的引擎,因此,為了預測物體在經歷中如何進行線性運動,了解物體在現實生活中是如何進行線性運動的非常重要。

線性運動是指沿著某一軸的運動。例如,當一塊塊體具有線性運動時,它沿著一定的軸移動。

一個灰色的方塊在一個黑暗的背景前。運動軸被突出顯示,並朝向螢幕的左側,表明該方塊將沿著世界的Y軸移動。

線性運動無法存在,除非有外部的物理力量在推動或拉動物體移動。根據牛頓的 第一運動定律,靜止的物體會保持靜止,移動的物體將保持以恆定的速度運動,除非受到外部力量的作用。例如,一塊靜止的方塊會保持靜止,除非風等物理力量將其推動。

力量是物理推或拉的方向和大小的量度,導致物體沿著一個軸改變其線性速度。速度的變化被稱為 加速度。這一概念對於在Studio中使物體運動尤其重要;您對物體施加的力量越大,物體的加速度越快。

這是因為力量需要超過任何反向的物理力量,如重力或摩擦的推力。例如,如果您將該方塊放在一個金屬板上,風的物理力量需要克服金屬板的摩擦力,才能持續加速該方塊。如果風的力量不比金屬板的摩擦大很多,該方塊仍會加速,只是速度比之前的例子慢一些。

一個灰色的方塊在一個黑色的金屬板前,旁邊有一個圖示表明該方塊將因為金屬板的摩擦而減慢運動。

線性速度是物體移動的量度,或物體每單位時間在某一軸上改變位置的快慢。Studio根據物體每秒移動多少個studs來測量線性速度。Studs是Roblox測量長度的主要物理單位,每個stud的長度約為28厘米。

一個灰色的方塊在默認的基本板的4x4網格紋理前。單個stud的立方體矩形被突出顯示。

理解線性速度對於在您的經歷中設計遊戲玩法非常重要,因為它有助於您確定為了達到特定的速度,您需要施加多少力量來使移動物體運行。例如,當您想要將物體推向上方時,考慮您必須如何調整力量以克服環境中的重力,這樣物體才能準確地運動。

以下各節將深入探討這些概念,幫助您學習如何以恆定或初始線性速度運動物體,並施加克服環境中任何反向物理力量所需的力量。當您使用即將介紹的技術回顧這些物理概念時,您將能更準確地預測如何調整屬性值,以在Studio中達到理想的線性運動行為。

維持恆定的線性速度

為了讓物體達到並維持恆定的線性速度,它需要一種力量來克服任何減速物體線性速度的反向物理力量,或使物體保持靜止。例如,如果您希望一個物體在Studio中的線性速度為 [0, 12, 0],您需要足夠的力量來讓該物體沿著Y軸以每秒12個stud的速度達到並保持。

所需的力量量不僅依賴於環境中存在的反向物理力量,如重力和摩擦,還取決於物體本身。例如,如果您有兩個形狀相同且沿著相同軸移動的物體,則質量較大的物體需要更多的力量才能實現相同的線性加速度。

小三角形的質量較小,因此需要較少的力量來達到相同的加速度。
大三角形的質量較大,因此需要更多的力量來達到相同的加速度。

以下小節使用不同形狀和大小的組件,教您如何以恆定的線性速度運動整個物體或僅運動物體的一部分。當您實驗不同的屬性值時,您將學會如何估算在您自己的經歷中組件所需的最大力量。

使用 LinearVelocity 約束

LinearVelocity 物件是一種 移動約束,會對整個組件施加力量以維持恆定的線性速度。通過在運動過程中不鎖定組件的位置,該組件可以自由旋轉,當其與其他物體在3D空間中碰撞時,這種類型的運動會導致令人驚訝的遊戲情境,這對玩家來說更難以預測。

當睡蓮彼此碰撞時,會改變方向,但仍然以恆定的線性速度沿著河流流動。

要開始移動該組件,LinearVelocity 約束需要知道:

  • 施加力量的點及其正負方向。
  • 您希望組件每秒移動的stud數量。
  • 引擎可以施加的最大力量,以便組件達到恆定線性速度。

為了演示這一過程,您將配置一個睡蓮,並添加一個參考的 LinearVelocity 約束,以使該睡蓮沿著世界的負X軸以恆定線性速度每秒移動 15 個stud。

一個睡蓮的特寫視圖。睡蓮的約束視覺輔助圖可見,並指向右側,即世界的負X軸。

添加附件

您可以通過在組件中添加 Attachment 物件來指定施加力量的點,然後在3D空間中配置該附件的位置。樣本 Moving Objects 經歷的中間將附件放置在睡蓮的中心,以便約束可以從該附件沿著特定的軸移動網格。

附件則提供視覺輔助,以幫助您可視化其運動軸。黃色箭頭標示附件的主要軸,橙色箭頭標示附件的次要軸。雖然在此技術的步驟中,這兩個運動軸並不影響睡蓮的運動,但不妨了解這些視覺輔助,以便未來參考,因為它們可以幫助您確定不同類型約束的理想行為,例如下一技術中的 PrismaticConstraint

附件的視覺輔助箭頭。指示附件的主要軸的黃色箭頭指向上方,而指示附件次要軸的橙色箭頭指向右側。

要添加附件:

  1. Explorer 窗口中,展開 LinearVelocityExample 目錄,然後展開其子 LilyPad_DIY 模型。

  2. Pad 網格中插入一個附件。

    1. 將鼠標懸停在該網格上並單擊 ⊕ 按鈕。會顯示上下文菜單。
    2. 從菜單中插入一個 Attachment。該附件顯示在部件的中心。
    3. 將附件重命名為 MoveAttachment
    睡蓮及其附件視覺輔助的特寫視圖。主要軸朝向鏡頭,次要軸朝向上方。

配置約束

現在,您的網格已經有固定點來移動睡蓮,您可以配置 LinearVelocity 約束的屬性,以指定恆定線性速度的方向和大小,您希望網格每秒移動的stud數量,以及引擎可以施加的力量,以便網格達到恆定線性速度。

樣本 Moving Objects 經歷對睡蓮施加最多 5000 Rowton 的恆定力量,使其沿著世界的負X軸以恆定的線性速度每秒移動15個stud。Rowtons是Roblox用來測量力量的主要單位。要查找Roblox物理單位及其如何轉換為公制單位,請參見 Roblox Units

要配置 LinearVelocity 約束:

  1. (可選) 在3D空間中使約束可見,以便您可以引用其線性方向。

    1. 在工具欄的 Model 標籤中,然後查找 Constraints 區域。
    2. 如果尚未啟用,則單擊 Constraint Details 以顯示約束視覺輔助。
    Studio約束區域UI的特寫視圖。
  2. Pad 網格中插入一個 LinearVelocity 約束。

    1. Explorer 窗口中,將鼠標懸停在該網格上,然後單擊 ⊕ 圖標。會顯示上下文菜單。
    2. 從上下文菜單中插入 LinearVelocity
  3. 將網格的附件指派給新的約束。

    1. Explorer 窗口中,選擇該約束。
    2. Properties 窗口中,
      1. Attachment0 設置為 MoveAttachment
      2. MaxForce 設置為 5000 以施加最多5000 Rowton的恆定力量,以達到目標線性速度。
      3. RelativeTo 設置為 World 以讓睡蓮相對於世界的位置和方向進行移動。
      4. VelocityConstraint 設置為 Line 以使力量沿著從附件延伸的直線進行約束。
      5. LineDirection 設置為 -1, 0, 0 以使睡蓮沿著世界的負X軸移動。請注意,如果您將此屬性設置為 1, 0, 0,則睡蓮將沿著世界的正X軸移動。
      6. LineVelocity 設置為 15 以使睡蓮每秒移動15個stud。
    睡蓮及其約束視覺輔助箭頭的特寫視圖,該箭頭指向右側,即世界的負X軸。
  4. 驗證您設置的力量使網格沿著世界的負X軸以每秒15個stud的速度移動。

    1. 在工具欄中,導航到 Test 標籤。
    2. 從遊戲測試模式中選擇 Run。Studio在當前相機位置模擬該經歷,而不包含您的角色在3D空間中。
    Studio中的快速遊戲測試選項。

使用 PrismaticConstraint 約束

PrismaticConstraint 物件是一種 機械約束,在兩個附件之間創建剛性關節,允許它們的父組件沿著一個軸 相對於彼此 移動。通過將兩個組件的位置鎖定在單一軸上,每個組件只能在一起以相同方向旋轉時進行旋轉。

這種類型的運動導致穩定的遊戲情境,讓玩家更容易預測。例如,樣本 Moving Objects 經歷利用 PrismaticConstraint 物件移動原木平台,玩家可以小心地穿越一條巨大的河流。

當您將 PrismaticConstraint.ActuatorType 設置為 Motor 時,此約束將對兩個附件施加力量,目標是讓附件達到並維持恆定的線性速度。如果您將一個附件的父組件錨定,那麼該力量會繼續以恆定的線性速度移動未錨定的組件,而錨定的組件則保持靜止。

要開始移動組件,PrismaticConstraint 約束需要知道:

  • 施加力量的點及其正負方向。
  • 您希望附件每秒移動的stud數量。
  • 引擎可以施加的最大力量,以便附件及其父組件達到恆定的線性速度。

為了演示這一過程,您將配置一個原木組件,該組件包含兩個擁有子附件的物體,PrismaticConstraint 參考這些附件,以使原木以恆定的線性速度每秒移動 40 個stud,沿著世界的負X軸。

一個棕色原木在河流上方的特寫視圖。原木的約束視覺輔助可見,並指向右側,即世界的負X軸。

配置附件

您可以通過在組件中添加兩個Attachment 物件來指定在組件內移動特定物體的方向,然後在3D空間中配置它們的對齊和方向。樣本 Moving Objects 經歷將兩個附件沿著世界的X軸對齊,靠近未錨定的原木與錨定的部分重疊的位置,並使每個附件的主要軸朝向世界的負X軸。

當您在下一部分配置您的 PrismaticConstraint 約束時,它將相對於錨定部分移動原木。換句話說,原木將遠離被錨定在3D空間中,無法移動的靜止部分。

要配置prismatic約束的附件:

  1. Explorer 窗口中,展開 PrismaticConstraintExample 目錄,然後展開其子 Log_DIY 模型。

  2. Log 網格中插入附件。

    1. 將鼠標懸停在該網格上並單擊 ⊕ 按鈕。會顯示上下文菜單。
    2. 從菜單中插入一個 Attachment。該附件顯示在部件的中心。
    3. 將附件重命名為 LogAttachment
    一個原木及其附件視覺輔助的特寫視圖。主要軸面朝鏡頭,次要軸向上。
  3. 使用相同的過程,在 Anchor 部件中插入附件,然後將該附件重命名為 AnchorAttachment

    一個原木和兩個附件視覺輔助的特寫視圖。新附件的主要軸視覺輔助朝向右側,次要軸朝上。
  4. 使用 View Selector 工具作為世界坐標的參考,旋轉 LogAttachmentAnchorAttachment,直到每個附件的主要軸面朝世界的負X軸。

    一個原木及其附件視覺輔助的特寫視圖。兩個附件的主要軸都指向右側,次要軸指向上方。
  5. 重新定位 AnchorAttachment,使兩個附件沿世界的X軸對齊。

    一個原木及其附件視覺輔助的特寫視圖,現在都已水平放置。兩個附件的主要軸都指向右側,次要軸指向上方。

配置約束

現在您的附件已經在同一軸上對齊並面向您希望原木移動的方向,您可以配置 PrismaticConstraint 約束的屬性,以指定要施加的目標恆定線性速度的正負方向,每秒希望附件移動的stud數量,以及引擎對原木施加的最大力量以實現恆定的線性速度。

雖然您可以為自己的用例選擇不同的值,但樣本 Moving Objects 經歷對附件施加最多 50000 Rowton 的恆定力量,使其沿著世界的負X軸以恆定的線性速度每秒移動 40 radians。然而,由於錨固附件位於一個錨固的物體中,只有原木的附件可以移動。

要配置prismatic約束:

  1. Log 網格中插入一個 PrismaticConstraint 物件。

    1. Explorer 窗口中,將鼠標懸停在該網格上,然後單擊 ⊕ 圖標。顯示上下文菜單。
    2. 從上下文菜單中插入一個 PrismaticConstraint
  2. 將原木的附件分配給新的約束,以便原木可以 相對於 錨定的塊部件移動。

    1. Explorer 窗口中,選擇約束。
    2. Properties 窗口中,
      1. Attachment0 設置為 AnchorAttachment
      2. Attachment1 設置為 LogAttachment。該約束在視口中顯示。
    一個原木及其約束視覺輔助的特寫視圖。它沒有箭頭視覺輔助,因為它尚未設置速度。
  3. Explorer 窗口中選擇該約束,然後在屬性窗口中,

    1. ActuatorType 設置為 Motor。將顯示新屬性字段。
    2. MotorMaxForce 設置為 50000,以施加最多50000 Rowtons的恆定力量以達到目標線性速度。
    3. Velocity 設置為 40 以使原木每秒移動40個stud。
    一個原木及其約束視覺輔助箭頭的特寫視圖,該箭頭指向右側,即世界的負X軸。
  4. 驗證您設置的力量使原木沿著世界的負X軸以每秒40個stud的速度移動。

    1. 在工具欄中,導航到 Test 標籤。
    2. 從遊戲測試模式中選擇 Run。Studio在當前相機位置模擬該經歷,而不包含您的角色在3D空間中。
    Studio中的快速遊戲測試選項。

施加初始線性力量

改變物體線性速度的另一種方法是施加一個力量脈衝。經過力量脈衝後,物體要麼因為存在摩擦等反向力量而減速到靜止,要麼在沒有任何反向力量的情況下保持恆定的線性速度。

此技術在顯著的遊戲事件後移動物體是非常有用的,例如爆炸或沖擊性碰撞,因為它向玩家提供了瞬時反饋。為了演示,以下子節教您如何在玩家與跳躍墊碰撞時,將其角色向上發射到空中,並使用初始脈衝,您可以根據自己的遊戲需求調整新值。

使用 ApplyImpulse

ApplyImpulse 方法在整個組件上施加力量,以獲得初始線性速度,然後在存在相反力量時減速停止。要開始移動組件,該方法需要知道:

  • 要移動的組件。
  • 用於施加力量以達到初始線性速度的軸。
  • 每個軸要施加的力量量。

您可以在腳本中定義所有這些值。例如,樣本腳本將要移動的組件定義為玩家角色的 Humanoid 物件,然後施加2500 Rowton秒的力量脈衝,以沿著世界的正Y軸向上發射玩家。請注意,玩家角色的質量不同,因此您可能需要增加和調整此力量,以便在不將質量較小的角色發射得過高的情況下發射每個玩家。

要使用 ApplyImpulse 移動組件:

  1. Explorer 窗口中,展開 ApplyImpulseExample 目錄,然後展開其子 JumpPad_DIY 模型。

  2. JumpPad 部件中插入腳本。

    1. 將鼠標懸停在該物件上,然後單擊 ⊕ 按鈕。會顯示上下文菜單。
    2. 從菜單中插入一個 Script。該附件顯示在部件的中心。
    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)