A service that computes paths.
| Key Concepts | Details |
|---|---|
| PathfindingService | A service that computes paths. |
| Path | An object representing a computed path. |
| Waypoints | Points along the path that the character will follow. |
| Agent Parameters | Parameters defining the movement capabilities and limitations of the character (e.g., radius, height, jump height). |
| Blocked Event | An event that fires when the path is blocked. |
| StatusChanged Event | An event that fires when the path status changes. |
Define Start Point and End Point
Roblox Studio
local PathfindingService = game:GetService("PathfindingService")
local character = workspace:WaitForChild("NPC")
local humanoid = character:WaitForChild("Humanoid")
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
humanoidRootPart.Anchored = false
-- Get the NPC's start position
local startPoint
if character.PrimaryPart then
startPoint = character.PrimaryPart.Position
elseif character:FindFirstChild("HumanoidRootPart") then
startPoint = character.HumanoidRootPart.Position
else
error("No valid part found to determine the NPC's position")
end
local endPoint = workspace.End.PositionCreating a Path
-- Create a path object
local path = PathfindingService:CreatePath({
AgentRadius = 2,
AgentHeight = 5,
AgentCanJump = true,
AgentJumpHeight = 10,
AgentMaxSlope = 45,
})Computing a Path
-- Compute the path
path:ComputeAsync(startPoint, endPoint)
-- Check the path's status
if path.Status == Enum.PathStatus.Success then
print("Path successfully computed.")
elseif path.Status == Enum.PathStatus.NoPath then
print("No path could be found.")
elseif path.Status == Enum.PathStatus.Fail then
print("Path computation failed.")
endVisualizing the Path
-- Visualize the path
local waypoints = path:GetWaypoints()
for _, waypoint in ipairs(waypoints) do
local part = Instance.new("Part")
part.Shape = Enum.PartType.Ball
part.Material = Enum.Material.Neon
part.Color = Color3.fromRGB(0, 255, 0)
part.Size = Vector3.new(0.5, 0.5, 0.5)
part.Position = waypoint.Position
part.Anchored = true
part.CanCollide = false
part.Parent = workspace
endRoblox Studio
Moving NPC Along the Path
-- Move the character along the path
for _, waypoint in ipairs(waypoints) do
print(waypoint.Position)
print(humanoid)
humanoid:MoveTo(waypoint.Position)
humanoid.MoveToFinished:Wait()
end
print("Character has followed the path.")Roblox Studio
Example: Complete Code
local PathfindingService = game:GetService("PathfindingService")
local character = workspace:WaitForChild("NPC")
local humanoid = character:WaitForChild("Humanoid")
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
humanoidRootPart.Anchored = false
-- Get the NPC's start position
local startPoint
if character.PrimaryPart then
startPoint = character.PrimaryPart.Position
elseif character:FindFirstChild("HumanoidRootPart") then
startPoint = character.HumanoidRootPart.Position
else
error("No valid part found to determine the NPC's position")
end
local endPoint = workspace.End.Position
-- Create a path object
local path = PathfindingService:CreatePath({
AgentRadius = 2,
AgentHeight = 5,
AgentCanJump = true,
AgentJumpHeight = 10,
AgentMaxSlope = 45,
})
-- Compute the path
path:ComputeAsync(startPoint, endPoint)
-- Check the path's status
if path.Status == Enum.PathStatus.Success then
print("Path successfully computed.")
elseif path.Status == Enum.PathStatus.NoPath then
print("No path could be found.")
elseif path.Status == Enum.PathStatus.Fail then
print("Path computation failed.")
end
-- Handle path being blocked during movement
path.Blocked:Connect(function(blockedWaypointIndex)
print("Path is blocked at waypoint index:", blockedWaypointIndex)
end)
-- Visualize the path
local waypoints = path:GetWaypoints()
for _, waypoint in ipairs(waypoints) do
local part = Instance.new("Part")
part.Shape = Enum.PartType.Ball
part.Material = Enum.Material.Neon
part.Color = Color3.fromRGB(0, 255, 0)
part.Size = Vector3.new(0.5, 0.5, 0.5)
part.Position = waypoint.Position
part.Anchored = true
part.CanCollide = false
part.Parent = workspace
end
-- Move the character along the path
for _, waypoint in ipairs(waypoints) do
print(waypoint.Position)
print(humanoid)
humanoid:MoveTo(waypoint.Position)
humanoid.MoveToFinished:Wait()
end
print("Character has followed the path.")Looking for more useful tools to boost your productivity?
Explore More ToolsIf you found this tutorial helpful and would like to support my work, please consider buying me a coffee.
Thank you very much for your support!
Buy me a coffee


