移動物體是指在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。

要添加附件:
在 Explorer 窗口中,展開 LinearVelocityExample 文件夾,然後展開其子項 LilyPad_DIY 模型。
在 Pad 網格中插入一個附件。
- 將鼠標懸停在網格上,然後單擊 ⊕ 按鈕。一個上下文菜單將顯示。
- 在菜單中,插入一個 Attachment。該附件將顯示在部件的中心。
- 將附件重新命名為 MoveAttachment。

配置約束
現在您的網格有了一個固定的點來移動睡蓮墊,您可以配置 LinearVelocity 約束的屬性,以指定恆定線性速度的方向和大小,您希望網格每秒移動的stud數量,以及引擎可以施加的最大力量,使該網格達到恆定的線性速度。
樣本移動物體體驗對睡蓮墊在世界的負X軸上施加高達5000 Rowtons的恆定力量,使其以恆定的線性速度移動15 stud。Rowtons是Roblox用來測量力量的主要單位。欲參考Roblox物理單位及其轉換為公制單位的信息,請參見Roblox單位。
要配置 LinearVelocity 約束:
要使約束在視口中可見,以便您可以引用其線性方向,請從Studio的查看菜單中啟用 顯示約束細節。
在 Pad 網格中插入一個 LinearVelocity 約束。
- 在 Explorer 窗口中,將鼠標懸停在網格上,然後單擊 ⊕ 圖標。一個上下文菜單將顯示。
- 從上下文菜單中插入 LinearVelocity。
將網格的附件分配給新的約束。
- 在 Explorer 窗口中,選擇約束。
- 在 Properties 窗口中,
- 將 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在沒有您角色的情況下,從當前相機位置模擬體驗。

使用 PrismaticConstraint 約束
PrismaticConstraint 物件是一種機械約束,它在兩個附件之間創建剛性接頭,允許它們的父組件沿著一個軸相對於彼此移動。通過將兩個組件的位置鎖定到單一軸上,每個組件只能在相同方向上同時旋轉。
這種運動方式會導致穩定的遊戲場景,使玩家更容易預測。例如,樣本移動物體體驗使用 PrismaticConstraint 物件來移動玩家可以小心穿越一條巨型河流的木頭平台。
當您將 PrismaticConstraint.ActuatorType 設置為 Motor 時,此約束在兩個附件上施加力量,以使附件到達並維持恆定的線性速度。如果您將其中一個附件的父組件加固,則力量將繼續以恆定線性速度移動未加固的組件,而加固的組件保持靜止。
要開始移動組件,PrismaticConstraint 約束需要知道:
- 應用力的點和正確或負確的方向。
- 您希望附件每秒移動的stud數量。
- 引擎可以施加的最大力量,讓附件及其父組件達到恆定線性速度。
為了演示這個過程,您將配置一個木頭組件,有兩個對象擁有子附件,這些附件會被 PrismaticConstraint 參考,將木頭以恆定的線性速度每秒移動40 stud,沿著世界的負X軸。

配置附件
您可以通過添加兩個 Attachment 物件到組件中,然後在3D空間中配置它們的對齊和方向來指定在組件內移動特定物體的方向。樣本移動物體體驗將兩個附件對齊於世界的X軸,靠近未加固木頭與加固部件重疊的位置,並將每個附件的主要軸方向朝向世界的負X軸。
當您在下一部分中配置PrismaticConstraint約束時,它將相對於加固部件移動木頭。換句話說,木頭將遠離無法移動的靜止部件,因為它在3D空間中是加固的。
要配置prismatic約束的附件:
在 Explorer 窗口中,展開 PrismaticConstraintExample 文件夾,然後展開其子項 Log_DIY 模型。
在 Log 網格中插入一個附件。
- 將鼠標懸停在網格上,然後單擊 ⊕ 按鈕。一個上下文菜單將顯示。
- 在菜單中,插入一個 Attachment。該附件將顯示在部件的中心。
- 將附件重新命名為 LogAttachment。

使用相同的過程,在 Anchor 部件中插入附件,然後將附件重新命名為 AnchorAttachment。

使用 View Selector 工具作為世界座標的參考,旋轉 LogAttachment 和 AnchorAttachment ,直到每個附件的主要軸朝向世界的負X軸。

重新定位 AnchorAttachment,以使兩個附件在世界的X軸上對齊。

配置約束
現在您的附件已在同一軸上對齊並朝著您希望木頭移動的方向,您可以配置 PrismaticConstraint 約束的屬性,以指定是否在每個附件的主要軸的正或負方向上施加目標的恆定線性速度、希望附件每秒移動的stud數量,以及引擎可以施加的最大力量,以使木頭達到恆定的線性速度。
雖然您可以為自己的用例選擇不同的值,但樣本移動物體體驗對附件施加高達50000 Rowtons的恆定力量,使其沿著世界的負X軸以恆定的線性速度每秒移動40 radians。然而,由於加固附件位於一個加固的物體中,因此僅木頭的附件可以移動。
要配置prismatic約束:
在 Log 網格中插入一個 PrismaticConstraint 物件。
- 在 Explorer 窗口中,將鼠標懸停在網格上,然後單擊 ⊕ 圖標。一個上下文菜單將顯示。
- 從上下文菜單中插入 PrismaticConstraint。
將木頭的附件分配給新的約束,以便木頭相對於加固的區塊部件移動。
- 在 Explorer 窗口中,選擇約束。
- 在 Properties 窗口中,
- 將 Attachment0 設置為 AnchorAttachment。
- 將 Attachment1 設置為 LogAttachment。該約束將在視口中顯示。

在 Explorer 窗口中,選擇約束,然後在 Properties 窗口中:
- 將 ActuatorType 設置為 Motor。新的屬性字段將顯示。
- 將 MotorMaxForce 設置為 50000,以施加高達50000 Rowtons的恆定力量來實現目標的線性速度。
- 將 Velocity 設置為 40,使木頭每秒移動40 stud。

驗證您設定的力量是否使木頭沿世界的負X軸每秒移動40 stud。
從中層的下拉菜單中選擇 運行 模擬模式,然後單擊 播放 按鈕以開始。Studio在沒有您角色的情況下,從當前相機位置模擬體驗。

施加初始線性力量
改變物體線性速度的另一種方法是施加一個衝擊力。經過衝擊力後,該物體將減速直到靜止(如果有如摩擦等對抗力量),或者在沒有對抗力量的情況下以恆定線性速度保持運動。
這種技術對於在重大遊戲事件後移動物體很有用,例如爆炸或劇烈碰撞,因為它為玩家提供了瞬時反饋。為了演示,以下子部分將教您如何在玩家角色與跳躍墊碰撞時向上發射角色,並使用您可以調整的初始衝擊力以滿足您的遊戲需求。
使用 ApplyImpulse
ApplyImpulse 方法對整個組件施加力量,以獲得初始線性速度,然後在存在對抗力量時減速至靜止。要開始移動組件,該方法需要知道:
- 要移動的組件。
- 用於應用力以達到初始線性速度的軸。
- 要施加到每個軸的力量大小。
您可以在腳本中定義所有這些值。例如,樣本腳本將要移動的組件定義為玩家角色的 Humanoid 物件,然後施加一個2500 Rowton-秒的衝擊力,以將玩家向上推向世界的正Y軸。請注意,玩家角色的質量不同,因此您可能需要增加和調整這個力量,以將每個玩家發射得不會過高,尤其是對目前質量較小的玩家角色。
要使用 ApplyImpulse 移動組件:
在 Explorer 窗口中,展開 ApplyImpulseExample 文件夾,然後展開其子項 JumpPad_DIY 模型。
在 JumpPad 部件中插入一個腳本。
- 將鼠標懸停在部件上,然後單擊 ⊕ 按鈕。一個上下文菜單將顯示。
- 在菜單中,插入一個 Script。該附件將顯示在部件的中心。
- 將腳本重新命名為 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)