Class.Path2D 实例,包括其 API 方法和属性,让您实现 2D 曲线和 2D 弯曲线,有助于实现路径基础动画和图形编辑器的用户界面效果。
创建 2D 路径
要将 Path2D 添加到屏幕或经验对象:
选择新的 Path2D 来显示窗口中的工具组件。 默认情况下, 添加点 工具是选择的。
开始单击屏幕以添加一系列 控制点 来形成路径。初始路径可能会不精确,但您可以 调整 之后任何控制点的位置。
完成后,单击 widget 的 完成 按钮或按 输入 。
修改控制点
使用 Explorer 层级中选择的 Class.Path2D 来修改其个별控制点以及它们的 1>切角1>。
移动点
要将单个控制点移动到路径上,启用 选择 工具(V),然后单击并拖动它到新位置。
对于非常具体的位置,请选择控制点,然后在 属性 窗口中,为该位置设置一个新位置( SelectedControlPointData )。
注意,点的位置不是绝对,而是相对于路径的父容器。例如,比较控制点 30% 从左侧和 20% 从顶部为路径内的路径,而不是在 ScreenGui 中,这是在上角的 Frame 中。
添加点
新控制点可以在两个现有点之间或从使用“Path2D”工具(P)的任意一端点添加到控制点。
删除点
要删除控制点,将鼠标悬停在它上,然后从上下文菜单中选择 删除 。
控制点 Tangents
控制点 切角 让您创建并调整曲线。
添加 tangents
要将 tangents 添加到任何尚未添加 tangents 的控制点:
启用 添加棱角 工具在工具箱中。
将鼠标悬停在所需控制点上,然后单击添加两个 镜像 切角(可选拖动后添加新切角)。
调整切角
要调整个人控制点的现有棱角:
启用 选择 工具(V).
将鼠标悬停在切角标记(不是控制点)上,然后单击并拖动它到新位置。如果切角是镜像的,那么配对的切角点将在单个位置移动。
要手动设置一个特定的 UDim2 位置以对切角:
启用 选择 工具(V),然后选择控制点。在属性窗口中,展开1> Class.Path2D.SelectedControlPointData|SelectedControlPointData1>필드来显示4> Datatype.Path2DControlPoint.LeftTangent|LeftT
将位置设置为 LeftTangent 和/或 RightTangent 。注意 这将 打破镜像行为 的 tangents 。
删除 tangents
要从控制点中删除两个切角,将鼠标悬停在该点上,然后右击该点,然后从上下文菜单中选择 清除切角 。
要删除只有一个 tangent (左或右) 的,将鼠标悬停在该 tangent 的标记上,然后选择 删除 tangent 。
打破和镜像
默认情况下,切角镜相互镜像。当您拖动调整一个切角标记时,并且两个切角点的相对位置将移动为单位。
要“打破”棱镜,让每个人都可以独立于其他人,将鼠标悬停在与其他人共同打破的控制点上,然后从上下文菜单中选择 打破棱镜 。打破后,您可以移动每个棱镜标记,无需影响其他人。
通路视图属性
您可以使用以下属性定制Path2D的视觉外观:
路径脚本
脚本对于多个路径相关工作流程有用。以下例子使用了方法 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()