Path

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Không Thể Tạo
Không Sao Chép

Đường dẫn các đối tượng lưu kết quả của các con đường được tạo bởi PathfindingService:CreatePath() .

Khi một đối tượng đường được tạo, bạn có thể gọi Path:ComputeAsync() với điểm bắt đầu và điểm kết thúc.Điều này sẽ cố gắng tính toán một con đường hợp lệ cho một nhân vật di chuyển, dựa trên các tham số mặc định hoặc tùy chỉnh được chuyển đến CreatePath() .Nếu ComputeAsync() thành công tìm thấy một con đường, đối tượng Path sẽ có giá trị Path.Status của Enum.PathStatus.Success .Nếu không, tình trạng sẽ là Enum.PathStatus.NoPath mà có thể xảy ra nếu có chướng ngại vật giữa hai điểm (và không có cách nào xung quanh) hoặc nếu các điểm nằm bên trong các vật thể rắn chắc.

Ngoài ComputeAsync() , Path các đối tượng có phương pháp GetWaypoints() trả về một danh sách các điểm dừng đại diện cho các điểm mà một nhân vật nên theo trình tự từ đầu đến cuối của con đường.

Cuối cùng, Path các đối tượng có thể kết nối với sự kiện Path.Blocked .Sự kiện này sẽ bắt lửa nếu, bất kỳ lúc nào trong quá trình tồn tại của con đường, con đường bị chặn.Lưu ý rằng điều này có thể xảy ra phía sau một nhân vật di chuyển dọc theo con đường, không chỉ ở trước nó.

Tóm Tắt

Phương Pháp

  • Trả về một array các điểm trong đường đi.

  • Sinh Lợi
    Đã Lỗi Thời

    Kiểm tra xem một con đường có bị chặn không bắt đầu từ một điểm dừng cụ thể.

  • ComputeAsync(start : Vector3,finish : Vector3):()
    Sinh Lợi

    Tính toán một Path từ vị trí bắt đầu đến vị trí cuối cùng.

Sự Kiện

Thuộc Tính

Chỉ Đọc
Không Sao Chép
Đọc Song Song

Sự thành công của Path.

Phương Pháp

GetWaypoints

Chức năng này trả về một mảng của tất cả PathWaypoints trong một Path , được tính toán bởi Path:ComputeAsync() .

Mỗi điểm dừng trong mảng xác định vị trí Vector3action để lấy khi điểm dừng này được đạt đến.Các mảng được sắp xếp theo thứ tự của điểm dừng từ đường bắt đầu đến đường kết thúc.

Nếu một con đường không thể được tính toán, chức năng này sẽ trả về một mảng trống.


Lợi Nhuận

Một mảng của PathWaypoints được sắp xếp từ đầu đường đến kết thúcđường.

Mẫu mã

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

Sinh Lợi

Chức năng này kiểm tra xem một con đường có bị chặn không bắt đầu từ điểm dừng được chỉ bởi bắt đầu .

Nó trả về điểm dừng đầu tiên của sự che khuất nếu bị chặn, -1 nếu không.nó trả về một lỗi nếu bắt đầu nhỏ hơn 0 hoặc lớn hơn số lượng điểm dừng trong Path .

Tham Số

start: number
Giá Trị Mặc Định: ""

Lợi Nhuận

ComputeAsync

()
Sinh Lợi

Chức năng này tính toán một Path từ vị trí bắt đầu đến vị trí cuối cùng.Chức năng này không được gọi tự động khi tạo một con đường và phải được kích hoạt mỗi khi con đường cần được cập nhật.

Khi con đường được tính toán, nó sẽ có một loạt các điểm dừng có thể, khi theo dõi, dẫn một nhân vật dọc theo con đường.Các điểm này được thu thập với chức năng Path:GetWaypoints() .

Tham Số

start: Vector3

Vị trí thế giới mà con đường được tính toán bắt đầu.

Giá Trị Mặc Định: ""
finish: Vector3

Vị trí thế giới mà con đường được tính toán kết thúc.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

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)

Sự Kiện

Blocked

Bắt lửa khi con đường được tính toán bị bịt.Lưu ý rằng các con đường có thể bị chặn ở đâu đó phía sau của đặc vụ, chẳng hạn như một đống đổ nát rơi trên một con đường khi đặc vụ chạy trốn.Xem Xử lý các con đường bị chặn để có chi tiết về việc kiểm tra tiến trình điểm dừng trước của một đại lý dọc theo một con đường.

Tham Số

blockedWaypointIdx: number

Unblocked

Bắt lửa khi một con đường được tính toán bị chặn bị mở khóa.Lưu ý rằng một con đường bị chặn có thể trở nên không bị chặn ở đâu đó phía sau của đặc vụ, làm cho phản ứng đối với sự kiện này không cần thiết.Xem Xử lý các con đường bị chặn để có chi tiết về việc kiểm tra tiến trình điểm dừng trước của một đại lý dọc theo một con đường.

Tham Số

unblockedWaypointIdx: number