This function causes the
Humanoid to attempt to walk to the given location by setting the
The location and part parameters correspond with what
Humanoid/WalkToPart will be set to.
If the part parameter is specified, the
Humanoid will still attempt to walk to the point. However, if the part moves then the point the
Humanoid is walking to will move to be at the same position relative to the part. For a visual demonstration of this, see below.
The reach goal state of a humanoid will timeout after 8 seconds if it doesn’t reach its goal. This is done so that NPCs won’t get stuck waiting for
Humanoid/MoveToFinished to fire. If you don’t want this to happen, you should repeatedly call MoveTo so that the timeout will keep resetting.
The position to set
Humanoid MoveTo Without Time out
This code sample includes a function that avoids the 8 second timeout on
Humanoid/MoveTo by calling
Humanoid/MoveTo again before the timeout elapses. It also includes an optional andThen parameter where developers can pass a function to be called when the humanoid reaches its destination.
local function moveTo(humanoid, targetPoint, andThen) local targetReached = false -- listen for the humanoid reaching its target local connection connection = humanoid.MoveToFinished:Connect(function(reached) targetReached = true connection:Disconnect() connection = nil if andThen then andThen() end end) -- start walking humanoid:MoveTo(targetPoint) -- execute on a new thread so as to not yield function spawn(function() while not targetReached do -- does the humanoid still exist? if not (humanoid and humanoid.Parent) then break end -- has the target changed? if humanoid.WalkToPoint ~= targetPoint then break end -- refresh the timeout humanoid:MoveTo(targetPoint) wait(6) end -- disconnect the connection if it is still connected if connection then connection:Disconnect() connection = nil end end) end