PcoWSkbVqDnWTu_dm2ix
We use cookies on this site to enhance your user experience
Collapse Sidebar

WalkToPoint

Humanoid

Vector3

A humanoid attempting to reach the goal specified using WalkToPoint and WalkToPart

WalkToPoint describes the 3D position in space that a humanoid is trying to reach, after having been prompted to do so by the
Humanoid’s Humanoid/MoveTo function.

If a humanoid’s Humanoid/WalkToPart is set, the goal is set by transforming WalkToPoint relative to the parts position and rotation. If WalkToPart is not set, then the humanoid will try to reach the 3D position specified by WalkToPoint directly.

Caveats

  • The value of WalkToPoint must be changed to a different value in order for the humanoid to start walking towards it.
  • If you want to make a humanoid walk to 0,0,0, you should use the Humanoid’s MoveTo function.
  • This may be changed in the future.
  • 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.


Code Samples


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