Pathfinding

Creating a Path

Part 1

Moving Objects on Path

Part 2

Moving NPCs

Part 3

Jumping over Objects

Part 4

Illustrate the Path

local pathParts = game.Workspace.Path

local start = game.Workspace.Start

local finish = game.Workspace.Finish


local PathfindingService = game:GetService("PathfindingService")


local path = PathfindingService:CreatePath()

path:ComputeAsync(start.Position, finish.Position)

-- Get the path waypoints

local waypoints = path:GetWaypoints()

pathParts:ClearAllChildren()

-- Loop through waypoints

for _, waypoint in pairs(waypoints) do

local part = Instance.new("Part")

part.Shape = "Ball"

part.Material = "Neon"

part.Size = Vector3.new(0.6, 0.6, 0.6)

part.Position = waypoint.Position

part.Anchored = true

part.CanCollide = false

part.Parent = pathParts

end

Move Part on Path

local pathParts = game.Workspace.Path

local start = game.Workspace.Start

local finish = game.Workspace.Finish


local PathfindingService = game:GetService("PathfindingService")


local path = PathfindingService:CreatePath()

path:ComputeAsync(start.Position, finish.Position)

-- Get the path waypoints

local waypoints = path:GetWaypoints()

pathParts:ClearAllChildren()

-- Loop through waypoints

for _, waypoint in pairs(waypoints) do

local part = Instance.new("Part")

part.Shape = "Ball"

part.Material = "Neon"

part.Size = Vector3.new(0.6, 0.6, 0.6)

part.Position = waypoint.Position

part.Anchored = true

part.CanCollide = false

part.Parent = pathParts

start.Position = waypoint.Position

wait(0.1)

end

Redraw Path

local pathParts = game.Workspace.Path

local start = game.Workspace.Start

local finish = game.Workspace.Finish


local PathfindingService = game:GetService("PathfindingService")

while true do

local path = PathfindingService:CreatePath()

path:ComputeAsync(start.Position, finish.Position)

-- Get the path waypoints

local waypoints = path:GetWaypoints()

pathParts:ClearAllChildren()

-- Loop through waypoints

for _, waypoint in pairs(waypoints) do

local part = Instance.new("Part")

part.Shape = "Ball"

part.Material = "Neon"

part.Size = Vector3.new(0.6, 0.6, 0.6)

part.Position = waypoint.Position

part.Anchored = true

part.CanCollide = false

part.Parent = pathParts

end

wait(0.1)

end

Object Tracking

local start = game.Workspace.Start

local finish = game.Workspace.Finish


local PathfindingService = game:GetService("PathfindingService")

while true do

local path = PathfindingService:CreatePath()

path:ComputeAsync(start.Position, finish.Position)

-- Get the path waypoints

local waypoints = path:GetWaypoints()

-- Loop through waypoints

for i = 1, 5 do

if i <= #waypoints then

local part = Instance.new("Part")

part.Shape = "Ball"

part.Material = "Neon"

part.Size = Vector3.new(0.6, 0.6, 0.6)

part.Position = waypoints[i].Position

part.Anchored = true

part.CanCollide = false

part.Parent = pathParts

start.Position = waypoints[i].Position

wait(.1)

end

end

end

Moving Humanoid Models

local pathParts = game.Workspace.Path

local start = game.Workspace.Start

local finish = game.Workspace.Finish

local dummy = game.Workspace.Dummy

local humanoid = dummy.Humanoid


local PathfindingService = game:GetService("PathfindingService")

local path = PathfindingService:CreatePath()


path:ComputeAsync(dummy.Torso.Position, finish.Position)

-- Get the path waypoints

local waypoints = path:GetWaypoints()


pathParts:ClearAllChildren()

-- Loop through waypoints

for _, waypoint in pairs(waypoints) do

local part = Instance.new("Part")

part.Shape = "Ball"

part.Material = "Neon"

part.Size = Vector3.new(0.6, 0.6, 0.6)

part.Position = waypoint.Position

part.Anchored = true

part.CanCollide = false

part.Parent = pathParts

end


for _, waypoint in pairs(waypoints) do

humanoid:MoveTo(waypoint.Position)

humanoid.MoveToFinished:Wait()

end


Waypoint Jump Action

if waypoint.Action == Enum.PathWaypointAction.Jump then

humaoid:ChangeState(Enum.HumanoidStateType.Jumping)

end

Humanoid Model Object Tracking

local pathParts = game.Workspace.Path

local finish = game.Workspace.Finish

local dummy = game.Workspace.Dummy

local humaoid = dummy.Humanoid


local PathfindingService = game:GetService("PathfindingService")

while true do

local path = PathfindingService:CreatePath()

path:ComputeAsync(dummy.Torso.Position, finish.Position)

local waypoints = path:GetWaypoints()

for i = 1, 5 do

if i <= #waypoints then

if waypoints[i].Action == Enum.PathWaypointAction.Jump then

humaoid:ChangeState(Enum.HumanoidStateType.Jumping)

end

humaoid:MoveTo(waypoints[i].Position)

humaoid.MoveToFinished:Wait()

end

end

end