Path

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Tidak Direplikasi

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

Metode

Acara

Properti

Hanya Baca
Tidak Direplikasi
Baca Paralel

Kesuksesan dari yang dihasilkan Path .

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.

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

Hasil

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

start: number
Nilai Default: ""

Memberikan nilai

ComputeAsync

()
Hasil

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

start: Vector3

Posisi dunia di mana jalur yang dihitung dimulai.

Nilai Default: ""
finish: Vector3

Posisi dunia di mana jalur yang dihitung selesai.

Nilai Default: ""

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.

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)

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

blockedWaypointIdx: number

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.

Parameter

unblockedWaypointIdx: number