2D 路径

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

Path2D 实例及其 API 方法和属性使您能够实现 2D 样条曲线和 2D 曲线线条,适用于基于路径的动画和图形编辑器等 UI 效果。

创建 2D 路径

要将 Path2D 添加到屏幕或体验中的对象:

  1. Explorer 窗口中,在可见的 ScreenGuiSurfaceGui 下插入一个 Path2D 实例(不需要是直接子项)。

    在 Explorer 层次结构中,Path2D 实例作为 ScreenGui 的父级。
  2. 选择新的 Path2D 以显示视口内工具小部件。默认情况下,选择了 添加 点 工具。

    在 2D 路径编辑器小部件中指示的添加点工具。
  3. 开始在屏幕上点击,以添加一系列 控制点 来形成路径。初始路径可能不精确,但您可以稍后 微调 任何控制点的位置。

    示意图说明如何使用 Add Point 工具通过连接一系列点来创建示例路径。
  4. 完成后,单击小部件的 完成 按钮或按 Enter

修改控制点

选中 Explorer 层次结构中的 Path2D 后,您可以修改其各个控制点及其 切线

移动点

要移动路径上的单个控制点,请启用 选择 工具 (V),然后点击并拖动到新位置。

在 2D 路径编辑器小部件中指示的选择工具。 示意图说明如何通过启用选择工具并点击和拖动将路径控制点移动到新位置。

对于非常具体的定位,选择控制点,然后在 属性 窗口中为点的 SelectedControlPointData 属性(UDim2)设置新位置。

在属性窗口中指示的 Path2D 实例的 SelectedControlPointData 属性。

请注意,点的位置不是绝对的,而是 相对于 路径的父容器。例如,比较在 ScreenGui 内部距左侧 30% 和距顶部 20% 的控制点,与放置在 ScreenGui 右上角的 Frame 内的相同路径。

示意图说明路径控制点的位置相对于其父容器。

添加点

新的控制点可以通过 添加 点 工具 (P) 添加到 Path2D,既可以在两个现有点之间添加,也可以从任一端点添加。

在 2D 路径编辑器小部件中指示的添加点工具。
示意图说明如何使用 Add Point 工具在两个现有点之间添加控制点。
在路径上任意悬停并单击以在两个现有点之间添加控制点
示意图说明如何使用 Add Point 工具在路径末尾添加控制点。
在一个端点上单击,然后再次单击以从该端点添加控制点

删除点

要删除控制点,将鼠标悬停在其上并右击,然后从上下文弹出菜单中选择 删除 点

示意图说明如何通过右击控制点并选择删除点来删除路径控制点。

控制点切线

控制点 切线 使您能够创建和调整路径上的曲线。

示意图说明几条带有多个切线控制点的曲线路径。

添加切线

要为未具有切线的任何控制点添加切线:

  1. 在工具小部件中启用 添加切线 工具。

    在 2D 路径编辑器小部件中指示的添加切线工具。
  2. 悬停在所需控制点上,然后单击以添加两个 镜像的 切线(可以选择在单击后拖动以 调整 新的切线)。

    示意图说明如何使用 Add Tangent 工具创建有切线的路径控制点。

调整切线

要调整单个控制点的现有切线:

  1. 启用 选择 工具 (V)。

    在 2D 路径编辑器小部件中指示的选择工具。
  2. 悬停在切线标记上(不是控制点),然后点击并拖动到新位置。如果切线是镜像的,则配对的切线点将同步移动。

    示意图说明如何启用选择工具来调整控制点的切线。

要手动为切线设置特定的 UDim2 位置:

  1. 启用 选择 工具 (V) 并选择控制点。在 属性 窗口中,展开 SelectedControlPointData 字段以显示 LeftTangentRightTangent 属性。

    在属性窗口中指示的 Path2D 控制点的 LeftTangent 和 RightTangent 属性。
  2. LeftTangent 和/或 RightTangent 设置位置。请注意,这将 中断切线的镜像行为

删除切线

要从控制点删除两个切线,将鼠标悬停在该点上并右击,然后从上下文弹出菜单中选择 清除 切线

示意图说明通过右击控制点并选择清除切线来清除两个切线。

要仅删除一个切线(左或右),将鼠标悬停在该切线的标记上,然后右击选择 删除 切线

示意图说明如何通过右击一个切线并选择删除切线来删除控制点的一个切线。

断开和镜像

默认情况下,切线是彼此镜像的。当您 拖动调整 一个切线标记时,配对的切线点将同步移动。

示意图说明如何启用选择工具来调整控制点的切线。

要“断开”切线以使其可以独立移动,请将鼠标悬停在相关控制点上,然后从上下文菜单中选择 断开 切线。断开后,您可以移动每个切线标记而不影响另一个。

示意图说明通过右击控制点并选择断开切线来断开控制点的切线。

路径视觉属性

您可以根据以下属性自定义 Path2D 的视觉外观:

属性描述
Color3设置路径线条的颜色。
Thickness设置路径线条的厚度,以像素为单位。
Visible使路径在编辑和运行时可见或不可见。
ZIndex路径相对于其他 GUI 渲染的顺序。
示意图说明厚度为 2,颜色为 (125, 125, 125) 的路径。
厚度 = 2
颜色 = (125, 125, 125)
示意图说明厚度为 10,颜色为 (225, 0, 50) 的路径。
厚度 = 10
颜色 = (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 是我们在美国及其他国家或地区的注册与未注册商标。