Path
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
เส้นทาง วัตถุเก็บผลลัพธ์ของเส้นทางที่สร้างโดย PathfindingService:CreatePath()
เมื่อสร้างวัตถุเส้นทางแล้ว คุณสามารถเรียก Path:ComputeAsync() ด้วยจุดเริ่มต้นและจุดสิ้นสุดนี้จะพยายามคำนวณเส้นทางที่ถูกต้องสำหรับตัวละครที่จะเคลื่อนที่ตาม, ขึ้นอยู่กับพารามิเตอร์เริ่มต้นหรือกำหนดเองที่ส่งไปที่ CreatePath()หาก ComputeAsync() ค้นหาเส้นทางสําเร็จ วัตถุ Path จะมีค่า Path.Status ของ Enum.PathStatus.Successมิฉะนั้นสถานะจะเป็น Enum.PathStatus.NoPath ซึ่งอาจเกิดขึ้นได้หากมีสิ่งกีดขวางระหว่างทั้งสองจุด (และไม่มีทางออก) หรือหากจุดอยู่ภายในวัตถุแข็ง
นอกจาก ComputeAsync() แล้ว วัตถุ Path มีวิธี GetWaypoints() ซึ่งจะคืนรายการเวย์พอยท์ที่แทนที่จุดที่ตัวละครควรปฏิบัติตามตามลําดับเพื่อไปจากจุดเริ่มต้นไปจนถึงจุดสิ้นสุดของเส้นทาง
ในที่สุดวัตถุ Path สามารถ เชื่อมต่อ กับอีเวนต์ Path.Blocked ได้อีเวนต์นี้จะยิงหากในช่วงเวลาใดก็ตามที่เส้นทางมีอยู่ เส้นทางถูกบล็อกโปรดทราบว่าสิ่งนี้สามารถเกิดขึ้นได้ หลัง ตัวละครที่เคลื่อนที่ไปตามเส้นทางไม่เพียงแค่อยู่ข้างหน้าเท่านั้น
สรุป
คุณสมบัติ
ความสำเร็จของ Path ที่สร้างขึ้น
วิธีการ
ส่งคืนคอลเลกชันของจุดในเส้นทาง
ตรวจสอบว่าเส้นทางถูกบล็อกเริ่มต้นที่จุดเวย์พอยท์เฉพาะ
คำนวณ Path จากตําแหน่งเริ่มต้นไปยังตําแหน่งสิ้นสุด
อีเวนต์
จะเกิดไฟไหม้เมื่อเส้นทางที่คำนวณได้ถูกบล็อก
จะเกิดไฟไหม้เมื่อเส้นทางที่คำนวณที่ถูกบล็อกถูกปลดบล็อก
คุณสมบัติ
วิธีการ
GetWaypoints
ฟังก์ชันนี้คืนค่าเป็นคอลเลกชันของทั้งหมด PathWaypoints ใน Path ตามที่คำนวณโดย Path:ComputeAsync()
แต่ละเวย์พอยท์ในคอลเลกชันระบุตำแหน่ง Vector3 และ action ที่จะใช้เมื่อถึงจุดทางนี้ตัวเลขในอาร์เรย์จะจัดเรียงตามลําดับเวย์พอยท์จากจุดเริ่มต้นของเส้นทางไปจนถึงจุดสิ้นสุดของเส้นทาง
หากเส้นทางไม่สามารถคำนวณได้ ฟังก์ชันนี้จะส่งคืนคอลเลกชันว่างเปล่า
ส่งค่ากลับ
ชุดของ PathWaypoints ปิด
ตัวอย่างโค้ด
The example below demonstrates how to create a Path and it's PathWaypoints using the PathService.
It tries to Path:ComputeAsync() a path between two Vector3 positions, from pathStart to pathEnd. If a path is successfully created, indicated by it's Enum.PathStatus, the code block gets an array of its waypoints using Path:GetWaypoints(). Then, it loops through the array and prints each waypoint's position.
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 มันส่งคืนจุดยืนแรกของการปิดกั้นถ้าถูกบล็อก -1 ถ้าไม่มันจะส่งคืนข้อผิดพลาดหาก เริ่ม น้อยกว่า 0 หรือมากกว่าจำนวนเวย์พอยท์ใน Path
พารามิเตอร์
ส่งค่ากลับ
ComputeAsync
ฟังก์ชันนี้คำนวณ Path จากตําแหน่งเริ่มต้นไปยังตําแหน่งสิ้นสุดฟังก์ชันนี้จะไม่ถูกเรียกโดยอัตโนมัติเมื่อสร้างเส้นทางและต้องเรียกใช้ทุกครั้งที่เส้นทางต้องการอัปเดต
เมื่อเส้นทางคำนวณแล้ว จะมีชุดจุดทางที่เมื่อทําตามได้ สามารถนําตัวละครไปตามเส้นทางได้จุดเหล่านี้ถูกรวบรวมด้วยฟังก์ชัน Path:GetWaypoints()
พารามิเตอร์
ตำแหน่งในโลกที่เส้นทางที่คำนวณเริ่มต้น
ตำแหน่งในโลกที่เส้นทางที่คำนวณเสร็จสิ้น
ส่งค่ากลับ
ตัวอย่างโค้ด
The code sample below explores how to move an NPC along a more complex path or around obstacles. This is known as pathfinding.
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)
อีเวนต์
Blocked
จะเกิดไฟไหม้เมื่อเส้นทางที่คำนวณได้ถูกบล็อกโปรดทราบว่าเส้นทางอาจถูกบล็อกที่ไหนสักแห่ง ข้างหลัง ตัวแทน เช่นกองกรวดที่ตกลงบนเส้นทางในขณะที่ตัวแทนหนีไปดู การจัดการเส้นทางที่ถูกบล็อก สำหรับรายละเอียดเกี่ยวกับการตรวจสอบความคืบหน้าของเวย์พอยท์ส่งต่อไปของตัวแทนตามเส้นทาง
พารามิเตอร์
Unblocked
จะเกิดไฟไหม้เมื่อเส้นทางที่คำนวณที่ถูกบล็อกถูกปลดบล็อกโปรดทราบว่าเส้นทางที่ถูกบล็อกอาจถูกปลดบล็อกที่ไหนสักแห่ง ข้างหลัง ตัวแทน ทำให้การตอบสนองต่อเหตุการณ์นี้ไม่จำเป็นดู การจัดการเส้นทางที่ถูกบล็อก สำหรับรายละเอียดเกี่ยวกับการตรวจสอบความคืบหน้าของเวย์พอยท์ส่งต่อไปของตัวแทนตามเส้นทาง