路径对象存储创建通过 PathfindingService:CreatePath() 的路径的结果。 一旦路径对象创建,您可以使用
除了 ComputeAsync() 外,Path 对象还有 GetWaypoints() 方法,该方法返回一个列表的方向代表在角色从开始到达路径的终点。
最后,Path 对象可以通过连接到 Class.Path.Blocked 事件来连接到 Path.Blocked 事件。 此事件将发生,如果在路径的存在期间(1>在路径的存在期间1>),路径被阻塞。 请注意, 这可以在路径上移动的角色后,不是在路径的前部。
属性
方法
GetWaypoints
此函数将所有 PathWaypoints 在 Path 中返回一个数列,根据 Path:ComputeAsync() 计算。
在 матри阵中的每个 Waypoint 指定一个 Vector3 位置和 action 来取得此 Waypoint 。 阵列是从路径开始到路径结束的路径顺序。
如果不能计算路径,这个函数将返回一个空的阵数组。
返回
Datatype.PathWaypoints 从路径开始到路径结束的命令列。
代码示例
Get Path Waypoints
local PathfindingService = game:GetService("PathfindingService")
local path = PathfindingService:CreatePath()
local PATH_START = Vector3.new(0, 1, 0)
local PATH_END = Vector3.new(100, 1, 25)
path:ComputeAsync(PATH_START, PATH_END)
if path.Status == Enum.PathStatus.Success then
local waypoints = path:GetWaypoints()
for _, waypoint in pairs(waypoints) do
print(waypoint.Position)
end
end
CheckOcclusionAsync
此函数检查是否有开始于 开始 所指示的方向点的路径被阻塞。
如果被阻塞,返回第一个位置点的方位;如果不是,它将返回一个错误,如果 start 小于 0 或大于 Path 中的位置点数。
参数
返回
ComputeAsync
void
此函数从开始位置计算一个 Path 从开始位置到最终位置。此函数不会自动调用,必须每次路径更新时才能调用。
当路径计算完成后,它将有一系列方向点,跟随时,可以让角色沿着路径移动。这些点是通过 Path:GetWaypoints() 函数收集的。
参数
返回
void
代码示例
Using the Pathfinding Service
local PathfindingService = game:GetService("PathfindingService")
local agentParams = {
AgentRadius = 2.0,
AgentHeight = 5.0,
AgentCanJump = false,
}
local currentWaypointIdx = 1
local path = PathfindingService:CreatePath(agentParams)
local humanoidRootPart = script.Parent:FindFirstChild("HumanoidRootPart")
local targetPosition = Vector3.new(50, 0, 50)
path:ComputeAsync(humanoidRootPart.Position, targetPosition)
-- When the path is blocked...
local function OnPathBlocked(blockedWaypointIdx)
-- Check if the obstacle is further down the path
if blockedWaypointIdx > currentWaypointIdx then
-- Recompute the path
path:ComputeAsync(humanoidRootPart.Position, targetPosition)
if path.Status == Enum.PathStatus.Success then
-- Retrieve update waypoint list with path:GetWaypoints()
-- and Continue walking towards target
else
-- Error, path not found
end
end
end
path.Blocked:Connect(OnPathBlocked)