So I have gotten all the pathfinding to work properly, my problem is having the NPC actively follow the player. What I think is happening is when I update the path the NPC wants to go to the first waypoint however sometimes that waypoint is behind them which causes them to turn around for a second.
So my question is ... can someone help me find a way to have the NPC's pathfinding update constantly to be able to smoothly follow a moving player?
Whats happening: https://gyazo.com/6b9bdb221942eb9baa2a7d9ed19b8cd7
Full script
local pathFinding = game:GetService("PathfindingService")
local npc = script.Parent
local humanoid = npc.Humanoid
local maxDistance = 50
local target
local wayPoints = {}
local path
local currentWaypoint
function findTarget()
local newDistance
local closestdistance
local closestPlayer
for i,v in pairs(game.Players:GetPlayers())do
if v.Character then
newDistance = (v.Character.HumanoidRootPart.Position-npc.Torso.Position).Magnitude
if newDistance <= maxDistance then
if closestdistance then
if newDistance < closestdistance then
closestdistance = newDistance
closestPlayer = v.Character.HumanoidRootPart
end
else
closestdistance = newDistance
closestPlayer = v.Character.HumanoidRootPart
end
end
end
end
return closestPlayer
end
function createPath()
target = findTarget()
if target then
path = pathFinding:CreatePath()
path:ComputeAsync(npc.Torso.Position,target.Position)
if path.Status == Enum.PathStatus.Success then
wayPoints = {}
wayPoints = path:GetWaypoints()
currentWaypoint = 1--setting this to 1 is what I think causes a problem
for i,v in pairs(workspace.Paths:GetChildren())do
v:Destroy()
end
for i,v in pairs(wayPoints)do
local part = Instance.new("Part")
part.Size = Vector3.new(.5,.5,.5)
part.Position = v.Position
part.BrickColor = BrickColor.new("Institutional white")
part.Anchored = true
part.Parent = workspace.Paths
end
moveTo()
else
print('path failed')
end
else
print('no player found')
end
end
function moveTo()
if wayPoints[currentWaypoint].Action == Enum.PathWaypointAction.Jump then
humanoid.Jump = true
end
humanoid:MoveTo(wayPoints[currentWaypoint].Position)
end
function onWaypointReached(reached)
if reached and currentWaypoint < #wayPoints then
currentWaypoint = currentWaypoint + 1
humanoid:MoveTo(wayPoints[currentWaypoint].Position)
end
end
createPath()
humanoid.MoveToFinished:Connect(onWaypointReached)
while true do--I am assuming there is a better way of doing this
createPath()
wait()
end
P.S .. sorry if this is a bad explanation :/
