路徑 對象存儲 PathfindingService:CreatePath() 創建的路徑的結果。
一旦路徑對象已建立,
除了 ComputeAsync() , Path 對象有 GetWaypoints() 方法,可以返回一個代表角色應該跟隨路徑從開始到最後的方點的列表。
最後,Path 對象可以 連接到 Class.Path.Blocked 事件。這個事件會在路徑存在期間發生,如果在路徑的存在期間路徑被阻塞,這個事件將發生。注意,這可以發生在 路徑 的前方,而不是在路徑的前方。
屬性
方法
GetWaypoints
此函數將所有 PathWaypoints 在 Path 中返回一個陣列,作為由 Path:ComputeAsync() 計算的。
每個方位點在陣列中指定一個 Vector3 位置和 action 來取得此 PathWaypoint 達到時。陣列是由路徑開始到路徑結束的順序排列在一起的。
如果路徑無法計算,此函數將返回空陣列。
返回
Datatype.PathWaypoint|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
此功能檢查是否有方塊路徑開始在 開始 指定的路徑。
如果已阻擋,返回第一個關閉點;如果未阻擋,返回第一個方位點的錯誤;如果 開始 小於 0 或大於 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)