2D 路径

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

Class.Path2D 实例,包括其 API 方法和属性,让您实现 2D 曲线和 2D 弯曲线,有助于实现路径基础动画和图形编辑器的用户界面效果。

创建 2D 路径

要将 Path2D 添加到屏幕或经验对象:

  1. 探险器 窗口中,在可见的 Path2DScreenGui (不需要是直接子)下插入一个 1>Class.Path2D1> 实例。

    Path2D instance parented to a ScreenGui in the Explorer hierarchy.
  2. 选择新的 Path2D 来显示窗口中的工具组件。 默认情况下, 添加点 工具是选择的。

    Add Point tool indicated in the 2D path editor widget.
  3. 开始单击屏幕以添加一系列 控制点 来形成路径。初始路径可能会不精确,但您可以 调整 之后任何控制点的位置。

    Diagram illustrating an example path created using the Add Point tool to connect a series of points.
  4. 完成后,单击 widget 的 完成 按钮或按 输入

修改控制点

使用 Explorer 层级中选择的 Class.Path2D 来修改其个별控制点以及它们的 1>切角1>。

移动点

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

Select tool indicated in the 2D path editor widget. Diagram illustrating how a path control point is moved to a new position by clicking and dragging with the Select tool enabled.

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

SelectedControlPointData property of a Path2D instance indicated in the Properties window.

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

Diagram illustrating how the positions of path control points are relative to their parent container.

添加点

新控制点可以在两个现有点之间或从使用“Path2D”工具(P)的任意一端点添加到控制点。

Add Point tool indicated in the 2D path editor widget.
Diagram illustrating how a control point is added between two existing points using the Add Point tool.
将鼠标悬停在路径上,单击添加控制点之间的两个现有点
Diagram illustrating how a control point is added to the end of a path using the Add Point tool.
单击一个端点,然后再次单击以从那个端点添加控制点

删除点

要删除控制点,将鼠标悬停在它上,然后从上下文菜单中选择 删除

Diagram illustrating how a path control point is deleted by right-clicking it and selecting Delete Point.

控制点 Tangents

控制点 切角 让您创建并调整曲线。

Diagram illustrating a curved path with several tangent control points.

添加 tangents

要将 tangents 添加到任何尚未添加 tangents 的控制点:

  1. 启用 添加棱角 工具在工具箱中。

    Add Tangent tool indicated in the 2D path editor widget.
  2. 将鼠标悬停在所需控制点上,然后单击添加两个 镜像 切角(可选拖动后添加新切角)。

    Diagram illustrating how a path control point with tangents is created with the Add Tangent tool.

调整切角

要调整个人控制点的现有棱角:

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

    Select tool indicated in the 2D path editor widget.
  2. 将鼠标悬停在切角标记(不是控制点)上,然后单击并拖动它到新位置。如果切角是镜像的,那么配对的切角点将在单个位置移动。

    Diagram illustrating how the tangents of a control point are adjusted with the Select tool enabled.

要手动设置一个特定的 UDim2 位置以对切角:

  1. 启用 选择 工具(V),然后选择控制点。在属性窗口中,展开1> Class.Path2D.SelectedControlPointData|SelectedControlPointData1>필드来显示4> Datatype.Path2DControlPoint.LeftTangent|LeftT

    LeftTangent and RightTangent properties of a Path2D control point indicated in the Properties window.
  2. 将位置设置为 LeftTangent 和/或 RightTangent 。注意 这将 打破镜像行为 的 tangents 。

删除 tangents

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

Diagram illustrating how both tangents of a control point are cleared by right-clicking it and selecting Clear Tangents.

要删除只有一个 tangent (左或右) 的,将鼠标悬停在该 tangent 的标记上,然后选择 删除 tangent

Diagram illustrating how one tangent of a control point is deleted by right-clicking it and selecting Delete Tangent.

打破和镜像

默认情况下,切角镜相互镜像。当您拖动调整一个切角标记时,并且两个切角点的相对位置将移动为单位。

Diagram illustrating how the tangents of a control point are adjusted with the Select tool enabled.

要“打破”棱镜,让每个人都可以独立于其他人,将鼠标悬停在与其他人共同打破的控制点上,然后从上下文菜单中选择 打破棱镜 。打破后,您可以移动每个棱镜标记,无需影响其他人。

Diagram illustrating how the tangents of a control point are broken by right-clicking it and selecting Break Tangents.

通路视图属性

您可以使用以下属性定制Path2D的视觉外观:

属性描述
Color3设置路径线的颜色。
Thickness设置路径线的厚度,以像素计。
Visible在编辑和运行时使路径可见或不可见。
ZIndex订购与其他 GUI 的关系。
Diagram illustrating a path with Thickness of 2 and Color3 of (125, 125, 125).
厚度 = 2Color3 = (125, 125, 125)
Diagram illustrating a path with Thickness of 10 and Color3 of (225, 0, 50).
厚度 = 10Color3 = (225, 0, 50)
Diagram illustrating a path layered in front of another using the ZIndex property.
ZIndex 层

路径脚本

脚本对于多个路径相关工作流程有用。以下例子使用了方法 such as GetControlPoints() ,该方法返回一个包含 Path2DControlPoints

在路径上排列用户界面对象

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()