2D 路徑

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

Path2D 實例及其 API 方法和屬性可讓您實現 2D 插值曲線和 2D 曲線,用於 UI 效果,例如基於路徑的動畫和圖形編輯器。

創建 2D 路徑

要將 Path2D 添加到屏幕或體驗中的物件:

  1. Explorer 窗口中,將 Path2D 實例插入到一個可見的 ScreenGuiSurfaceGui 下(它不需要是直接子項)。

    在 Explorer 層級中,Path2D 實例父級設置為 ScreenGui。
  2. 選擇新的 Path2D 以顯示視口內工具小部件。默認情況下,選擇了 Add Point 工具。

    在 2D 路徑編輯器小部件中指示 Add Point 工具。
  3. 開始在屏幕上單擊以添加一系列 控制點 以形成路徑。初始路徑可能不精確,但您可以在稍後 微調 任何控制點的位置。

    圖示說明如何使用 Add Point 工具連接一系列點來創建示例路徑。
  4. 完成後,單擊小部件的 Done 按鈕或按 Enter 鍵。

修改控制點

Explorer 層級中選擇 Path2D 時,您可以修改其各個控制點以及它們的 切線

移動點

要移動路徑上的單個控制點,啟用 Select 工具 (V),然後單擊並拖動到新位置。

在 2D 路徑編輯器小部件中指示 Select 工具。 圖示說明如何通過選擇工具啟用後單擊和拖動將路徑控制點移動到新位置。

對於非常特定的位置設定,選擇控制點,然後在 Properties 窗口中,為點的 SelectedControlPointData 屬性設定新位置(UDim2)。

在 Properties 窗口中指示 Path2D 實例的 SelectedControlPointData 屬性。

請注意,點的位置不是絕對的,而是 相對於 路徑的父容器。例如,將控制點從左邊 30% 和從上邊 20% 的位置進行比較,對於放置在 ScreenGui 中的路徑,與定位在 ScreenGui 右上角的 Frame 中的相同路徑。

圖示說明路徑控制點的位置相對於其父容器。

添加點

新控制點可以使用 Add Point 工具 (P) 添加到 Path2D,無論是兩個現有點之間還是從任一端點。

在 2D 路徑編輯器小部件中指示 Add Point 工具。
圖示說明如何使用 Add Point 工具在兩個現有點之間添加控制點。
在路徑上懸停並單擊以在兩個現有點之間添加控制點
圖示說明如何使用 Add Point 工具將控制點添加到路徑末端。
單擊一個端點,然後再次單擊以從該端添加控制點

刪除點

要刪除控制點,將鼠標懸停並右鍵單擊它,然後從上下文彈出菜單中選擇 Delete Point

圖示說明如何通過右鍵單擊控制點並選擇 Delete Point 來刪除路徑控制點。

控制點切線

控制點 切線 讓您在路徑上創建和調整曲線。

圖示說明一條具有多個切點控制點的曲線路徑。

添加切線

要向任何尚未擁有切線的控制點添加切線:

  1. 在工具小部件中啟用 Add Tangent 工具。

    在 2D 路徑編輯器小部件中指示 Add Tangent 工具。
  2. 將鼠標懸停在所需的控制點上,然後單擊以添加兩個 鏡像 切線(可選擇在單擊後拖動以 調整 新的切線)。

    圖示說明如何使用 Add Tangent 工具創建帶切線的路徑控制點。

調整切線

要調整單個控制點的現有切線:

  1. 啟用 Select 工具 (V)。

    在 2D 路徑編輯器小部件中指示 Select 工具。
  2. 將鼠標懸停在切線標記(而不是控制點)上,然後單擊並拖動到新位置。如果切線是鏡像的,配對的切線點將一起移動。

    圖示說明在啟用選擇工具的情況下如何調整控制點的切線。

若要手動為切線設置特定的 UDim2 位置:

  1. 啟用 Select 工具 (V) 並選擇控制點。 在 Properties 窗口中,展開 SelectedControlPointData 欄位以顯示 LeftTangentRightTangent 屬性。

    在 Properties 窗口中指示 Path2D 控制點的 LeftTangent 和 RightTangent 屬性。
  2. 設定 LeftTangent 和/或 RightTangent 的位置。請注意,這將會 打破鏡像行為 的切線。

刪除切線

要從控制點刪除兩個切線,將鼠標懸停並右鍵單擊該點,然後從上下文彈出菜單中選擇 Clear Tangents

圖示說明如何通過右鍵單擊控制點並選擇 Clear Tangents 來清除控制點的兩個切線。

要僅刪除其中一個切線(左或右),將鼠標懸停並右鍵單擊該切線的標記,然後選擇 Delete Tangent

圖示說明如何通過右鍵單擊切點並選擇 Delete Tangent 來刪除控制點的一個切點。

斷開和鏡像

默認情況下,切線彼此鏡像。當您 拖動以調整 一個切線標記時,配對的切線點會一起移動。

圖示說明在選擇工具啟用的情況下如何調整控制點的切線。

要“打破”切線,使每個切線可以獨立於另一個移動,將鼠標懸停並右鍵單擊相關控制點,然後從上下文菜單中選擇 Break Tangents。打破後,您可以移動每個切線標記而不影響另一個。

圖示說明如何通過右鍵單擊控制點並選擇 Break Tangents 來打破控制點的切線。

路徑視覺屬性

您可以使用以下屬性自定義 Path2D 的視覺外觀:

屬性描述
Color3設置路徑線的顏色。
Thickness設置路徑線的粗細,以像素為單位。
Visible在編輯和運行時使路徑可見或不可見。
ZIndex路徑相對於其他 GUI 渲染的順序。
圖示說明一條粗細為 2,顏色為 (125, 125, 125) 的路徑。
Thickness = 2
Color3 = (125, 125, 125)
圖示說明一條粗細為 10,顏色為 (225, 0, 50) 的路徑。
Thickness = 10
Color3 = (225, 0, 50)
圖示說明使用 ZIndex 屬性將路徑層疊在另一條路徑前面。
ZIndex 層疊

路徑腳本

腳本對於多種路徑相關的工作流程非常有用。以下示例使用的方法如 GetControlPoints() 返回 Path2DControlPoints 的表格,及 GetPositionOnCurveArcLength() 返回在給定 t 值沿插值曲線的 UDim2 位置。

沿路徑排列 UI 物件

local parent = script.Parent
local path = parent:FindFirstChildWhichIsA("Path2D")
local function arrangeChildren()
local segmentCount = #path:GetControlPoints()
local objectsToArrange = {}
for _, child in parent:GetChildren() do
if child:IsA("GuiObject") then
table.insert(objectsToArrange, child)
end
end
for idx, child in objectsToArrange do
local t = idx / (#objectsToArrange + 1)
child.Position = path:GetPositionOnCurveArcLength(t)
end
end
-- 最初沿路徑排列子 UI 物件
arrangeChildren()
-- 監聽子項的添加/刪除以調整排列
parent.ChildAdded:Connect(arrangeChildren)
parent.ChildRemoved:Connect(arrangeChildren)
沿路徑動畫 UI 物件

local Tweenservice = game:GetService("TweenService")
local parent = script.Parent
local path = parent:FindFirstChildWhichIsA("Path2D")
local objectToAnimate = parent:FindFirstChildWhichIsA("GuiObject")
local TWEEN_DURATION = 4
local TWEEN_EASING_STYLE = Enum.EasingStyle.Cubic
local TWEEN_EASING_DIRECTION = Enum.EasingDirection.InOut
local pathSampleValue = Instance.new("NumberValue")
local tweenInfo = TweenInfo.new(TWEEN_DURATION, TWEEN_EASING_STYLE, TWEEN_EASING_DIRECTION, 0, true, 2)
local tween = Tweenservice:Create(pathSampleValue, tweenInfo, {Value = 1})
local function onSampleValueChanged()
objectToAnimate.Position = path:GetPositionOnCurveArcLength(pathSampleValue.Value)
end
pathSampleValue.Changed:Connect(onSampleValueChanged)
tween:Play()
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。