創建移動物體

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

移動物體是指在三維空間中沿著一個或多個軸移動的物體。利用Roblox的模擬引擎的內建功能,您可以使物體以模擬現實世界物理行為的方式移動並與其環境互動,這些行為對玩家來說是熟悉且直觀的,例如重力、空氣動力學和摩擦力。

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

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

線性運動和物理力量

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

線性運動是沿著一個軸的運動。例如,當一個方塊具有線性運動時,它沿著一個設定的軸移動。

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

線性運動無法在沒有外部物理力量推動或拉動物體的情況下存在。根據牛頓的第一運動定律,靜止的物體保持靜止,運動的物體在沒有外部力量作用的情況下保持恆定速度運動。例如,靜止的方塊保持靜止,除非有像風這樣的物理力量推動它移動。

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

這是因為力量需要大於任何對物體施加的物理力量,例如重力或摩擦力。例如,如果您將方塊放在金屬板上,風的物理力量需要克服金屬板的摩擦力才能繼續加速方塊。如果風的力量不比金屬板的摩擦力大得多,方塊仍然會加速,只是比前面的例子慢一些。

一個灰色方塊在深灰色金屬板前,圖示顯示方塊將受到板摩擦的影響,減緩方塊因風的運動。

線性速度是物體運動的度量,或物體在一段時間內沿著一個軸改變其位置的速度。Studio根據物體每秒移動多少個stud來測量線性速度。Stud是Roblox用於測量長度的主要物理單位,每個stud約等於現實世界中的28厘米。

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

理解線性速度對於設計遊戲玩法非常重要,因為它幫助您確定為了實現移動物體的特定速度需要多少力量。例如,當您想要將物體向上推進時,考慮如何調整您的力量以克服環境中的重力,使物體準確移動是非常重要的。

接下來的部分將深入探討這些概念,讓您學習如何以恆定或初始的線性速度移動物體,並施加必要的力量以克服環境中的任何對抗性物理力量。在您回顧這些物理概念及即將介紹的技術時,您可以更準確地預測如何調整屬性值,以實現Studio中任何理想的線性運動行為。

維持恆定的線性速度

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

所需的力量不僅取決於環境中存在的對抗性物理力量,例如重力和摩擦力,還取決於物體本身。例如,如果您有兩個形狀相同的物體在同一軸上移動,質量較大的物體需要更多的力量才能達到相同的線性加速度。

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

接下來的子部分使用不同形狀和大小的組件來教您如何以恆定的線性速度移動整個物體或僅移動物體的一部分。在您嘗試不同的屬性值時,您將學會如何估算在自己的遊戲中對於組件所需的最大力量。

使用LinearVelocity約束

LinearVelocity 物件是一種移動約束,它對整個組件施加力量以維持恆定的線性速度。通過在運動過程中不將組件的位置鎖定到某一軸,組件可以自由旋轉,因為它與三維空間中的其他物體發生碰撞。這種運動方式會導致意想不到的遊戲場景,讓玩家更難以預測。

當睡蓮墊相互碰撞時,它們改變了方向,但仍然以恆定的線性速度向下流動。

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

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

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

睡蓮墊的特寫視圖。睡蓮墊的約束可視化輔助工具可見,並指向右側,即世界的負X軸。

添加附件

您可以通過向組件添加一個Attachment物件來指定施加力量的點,然後配置附件在三維空間中的位置。樣本移動物體遊戲在睡蓮墊的中心放置了一個附件,以便約束可以沿著特定軸從附件移動網格。

附件包括可視化輔助工具,幫助您可視化它們的運動軸。黃色箭頭表示附件的主要軸,橙色箭頭表示附件的次要軸。雖然在這個技術的步驟中,這兩個運動軸都不影響睡蓮墊的運動,但了解這些可視化輔助工具對於未來的參考是很重要的,因為它們可以幫助您確定不同類型約束的理想行為,例如下一個技術中的PrismaticConstraint

附件的可視化輔助工具箭頭。表示附件的主要軸的黃色箭頭指向上方,表示附件的次要軸的橙色箭頭指向右側。

要添加附件:

  1. Explorer窗口中,展開LinearVelocityExample文件夾,然後展開其子項LilyPad_DIY模型。

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

    1. 將鼠標懸停在網格上,然後單擊⊕按鈕。將顯示上下文菜單。
    2. 從菜單中插入一個Attachment。附件顯示在部件的中心。
    3. 將附件重命名為MoveAttachment
    睡蓮墊和其附件可視化輔助工具的特寫視圖。主要軸指向鏡頭,次要軸指向上方。

配置約束

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

樣本移動物體遊戲施加最多5000 Rowtons的恆定力量,以使睡蓮墊沿著世界的負X軸以恆定的線性速度每秒移動15個stud。Rowtons是Roblox用於測量力量的主要物理單位。要參考Roblox物理單位及其如何轉換為公制單位,請參見Roblox單位

要配置LinearVelocity約束:

  1. 為了使約束在視口中可見,以便您可以參考其線性方向,請從Studio的View菜單中啟用Show Constraint Details

  2. Pad網格中插入一個LinearVelocity約束。

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

    1. Explorer窗口中,選擇該約束。
    2. Properties窗口中,
      1. Attachment0設置為MoveAttachment
      2. MaxForce設置為5000,以施加最多5000 Rowtons的恆定力量以達到目標線性速度。
      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。

    • 從中層的下拉菜單中選擇Run模擬模式,然後單擊Play按鈕以開始。Studio在當前相機位置模擬遊戲,而不在三維空間中顯示您的角色。

      Studio中測試模式下拉菜單的運行選項。

使用PrismaticConstraint約束

PrismaticConstraint物件是一種機械約束,它在兩個附件之間創建一個剛性接頭,允許其父組件沿著一個軸相對於彼此移動。通過將兩個組件的位置鎖定到單一軸上,每個組件只能在一起旋轉時才能旋轉。

這種運動方式導致穩定的遊戲場景,玩家更容易預測。例如,樣本移動物體遊戲使用PrismaticConstraint物件來移動玩家可以小心穿越的巨型河流上的木頭平台。

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

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

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

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

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

配置附件

您可以通過向組件添加兩個Attachment物件來指定在組件內部移動特定物體的方向,然後配置它們在三維空間中的對齊和方向。樣本移動物體遊戲在未固定的木頭與固定部件重疊的位置附近沿著世界的X軸對齊兩個附件,並將每個附件的主要軸定向面向世界的負X軸。

當您在下一部分配置PrismaticConstraint約束時,它將相對於固定部件移動木頭。換句話說,木頭將遠離無法移動的靜止部件,因為它在三維空間中是固定的。

要為棱柱約束配置附件:

  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數量,以及引擎可以施加的最大力量,以使木頭達到恆定的線性速度。

雖然您可以為自己的用例選擇不同的值,但樣本移動物體遊戲施加最多50000 Rowtons的恆定力量,以使附件沿著世界的負X軸以恆定的線性速度每秒移動40個stud。然而,由於固定附件位於固定物體中,只有木頭的附件可以移動。

要配置棱柱約束:

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

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

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

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

    • 從中層的下拉菜單中選擇Run模擬模式,然後單擊Play按鈕以開始。Studio在當前相機位置模擬遊戲,而不在三維空間中顯示您的角色。

      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)
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。