Pathfinding

0

  • find [the closest] path for an NPC to move from point A to point B
local PathfindingService = game:GetService("PathfindingService")

-- Variables for the zombie, its humanoid, and destination
local zombie = game.Workspace.Zombie
local humanoid = zombie.Humanoid
local destination = game.Workspace.PinkFlag

-- Create the path object
local path = PathfindingService:CreatePath()

-- Variables to store waypoints table and zombie current waypoint
local waypoints
local currentWaypointIndex

local function followPath(destinationObject)
    -- Compute and check the path
    path:ComputeAsync(zombie.HumanoidRootPart.Position, destinationObject.PrimaryPart.Position)
    -- Empty waypoints table after each new path computation
    waypoints = {}

    if path.Status == Enum.PathStatus.Success then
        -- Get the path waypoints and start zombie walking
        waypoints = path:GetWaypoints()
        -- Move to first waypoint
        currentWaypointIndex = 1
        humanoid:MoveTo(waypoints[currentWaypointIndex].Position)
    else
        -- Error (path not found); stop humanoid
        humanoid:MoveTo(zombie.HumanoidRootPart.Position)
    end
end

local function onWaypointReached(reached)
    if reached and currentWaypointIndex < #waypoints then
        currentWaypointIndex = currentWaypointIndex + 1
        humanoid:MoveTo(waypoints[currentWaypointIndex].Position)
    end
end

local function onPathBlocked(blockedWaypointIndex)
    -- Check if the obstacle is further down the path
    if blockedWaypointIndex > currentWaypointIndex then
        -- Call function to re-compute the path
        followPath(destination)
    end
end

-- Connect 'Blocked' event to the 'onPathBlocked' function
path.Blocked:Connect(onPathBlocked)

-- Connect 'MoveToFinished' event to the 'onWaypointReached' function
humanoid.MoveToFinished:Connect(onWaypointReached)

followPath(destination)

https://www.youtube.com/watch?v=VWKNtqjPKn0

https://developer.roblox.com/en-us/articles/Pathfinding

  • 0 posts
  • 0 subtopics
  • 11 days ago by vince