Path
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Jalur objek menyimpan hasil jalur yang dibuat oleh PathfindingService:CreatePath() .
Setelah objek jalur dibuat, Anda dapat memanggil Path:ComputeAsync() dengan titik awal dan titik akhir.Ini akan mencoba menghitung jalur yang valid untuk karakter bergerak, berdasarkan parameter default atau khusus yang dikirim ke CreatePath() .Jika ComputeAsync() berhasil menemukan jalur, objek Path akan memiliki nilai Path.Status dari Enum.PathStatus.Success.Jika tidak, statusnya akan menjadi Enum.PathStatus.NoPath yang dapat terjadi jika ada hambatan di antara kedua titik (dan tidak ada jalan di sekitarnya) atau jika titik-titik berada di dalam objek padat.
Selain ComputeAsync() , objek Path memiliki metode GetWaypoints() yang meny返ikan daftar titik jalan yang mewakili titik yang harus diikuti karakter dalam urutan untuk sampai ke akhir jalur.
Akhirnya, Path objek bisa terhubung ke acara Path.Blocked.Peristiwa ini akan terjadi jika, kapan saja selama keberadaan jalur, jalur diblokir.Perhatikan bahwa ini dapat terjadi di belakang karakter yang bergerak di sepanjang jalur, bukan hanya di depannya.
Rangkuman
Properti
Kesuksesan dari yang dihasilkan Path .
Metode
Kembalikan array poin di jalur.
Memeriksa apakah jalur diblokir mulai dari titik jalan tertentu.
Menghitung Path dari posisi awal ke posisi akhir.
Acara
Melepaskan api saat jalur yang dihitung diblokir.
Melepaskan api saat jalur yang dihitung yang diblokir menjadi tidak diblokir.
Properti
Metode
GetWaypoints
Fungsi ini mengembalikan array dari semua PathWaypoints di dalam Path , seperti yang dihitung oleh Path:ComputeAsync() .
Setiap waypoint dalam array menentukan posisi Vector3 dan action untuk diambil saat PathWaypoint ini tercapai.배열은 경로 시작 지점에서 경로 끝 지점까지의 순서로 정렬됩니다.The array is arranged in the order of waypoints from the path start to path end.
Jika jalur tidak dapat dihitung, fungsi ini akan mengembalikan array kosong.
Memberikan nilai
Sebuah array dari PathWaypoints diurutkan dari mulai jalur sampai akhirijalur.
Contoh Kode
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
Fungsi ini memeriksa apakah jalur diblokir mulai dari waypoint yang ditunjukkan oleh mulai .
Ini mengembalikan titik pertama penutupan jika diblokir, -1 jika tidak.itu mengembalikan kesalahan jika mulai kurang dari 0 atau lebih besar dari jumlah waypoint di Path.
Parameter
Memberikan nilai
ComputeAsync
Fungsi ini menghitung Path dari posisi awal ke posisi akhir.Fungsi ini tidak secara otomatis dipanggil saat jalur dibuat dan harus dipanggil setiap kali jalur perlu diperbarui.
Setelah Jalur dihitung, itu akan memiliki serangkaian titik jalan yang, saat diikuti, dapat membawa karakter di sepanjang jalur.Poin-poin ini dikumpulkan dengan fungsi Path:GetWaypoints().
Parameter
Posisi dunia di mana jalur yang dihitung dimulai.
Posisi dunia di mana jalur yang dihitung selesai.
Memberikan nilai
Contoh Kode
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)
Acara
Blocked
Melepaskan api saat jalur yang dihitung diblokir.Perhatikan bahwa jalur mungkin diblokir di suatu tempat di belakang agen, seperti tumpukan reruntuhan jatuh di jalur saat agen melarikan diri.Lihat Penanganan Jalur yang Diblokir untuk rincian tentang memeriksa kemajuan jalur ke depan dari agen di sepanjang jalur.
Parameter
Unblocked
Melepaskan api saat jalur yang dihitung yang diblokir menjadi tidak diblokir.Perhatikan bahwa jalur yang diblokir dapat dibuka di suatu tempat di belakang agen, secara efektif membuat reaksi terhadap peristiwa ini tidak diperlukan.Lihat Penanganan Jalur yang Diblokir untuk rincian tentang memeriksa kemajuan jalur ke depan dari agen di sepanjang jalur.