Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Help with pathfinding?

Asked by 9 years ago

The script creates one node each time when it should be creating more then one why and how do I fix it?

Even though the script fails to visualize the path the Character still moves.

Pathfinding = game:GetService("PathfindingService")
Character = game.Workspace.Character.Humanoid
Start = Character.Torso.Position
End = Vector3.new(10,10,10)
---------------------------
function FindPointModel()
    local FoundPointModel = game.Workspace:FindFirstChild("PointModel")
        if not FoundPointModel then
            local Model = Instance.new("Model",game.Workspace)
            Model.Name = "PointModel"
        else return FoundPointModel--If found then return the Model
    end
end
---------------------------
function VisualizePath(Path)
    local Points = Path:GetPointCoordinates()
    for _,Point in pairs(Points) do
        print("Given Points are : ",Point)
        local Part = Instance.new("Part",FindPointModel())--Creates Nodes
            Part.Position = Point
            Part.Name = "Nodes"
            Part.Anchored = true
            Part.Size = Vector3.new(1,1,1)
            Part.CanCollide = false
            return Points --Returns Vairble Points:Path:GetPointCoordinates()
    end
end
---------------------------
Path = Pathfinding:ComputeSmoothPathAsync(Start,End,512)
Points = VisualizePath(Path)
for i,v in pairs (Points) do
    Character:MoveTo(v)
end

1 answer

Log in to vote
1
Answered by
Gamenew09 180
9 years ago

Why are you returning your Points inside of the for loop? I would also recommend you to name your parts by id and if you are going to do this more than once use :ClearAllChildren()on the PointModel when you call VisualizePath.

Code I ended up with:

function VisualizePath(Path)
    local Points = Path:GetPointCoordinates()
    for i,Point in pairs(Points) do
        print("Given Points are : ",Point)
        local Part = Instance.new("Part",FindPointModel())--Creates Nodes
            Part.CFrame = CFrame.new(Point) -- I would use this just in case the Path goes through a wall.
            Part.Name = "Node"..i
            Part.Anchored = true
            Part.Size = Vector3.new(1,1,1)
            Part.CanCollide = false
             --return Points DON'T DO THIS, it will break the loop on the first point. That's also why the character still moves to the points.
    end
    return Points
end

Just replace the VisualizePath function.

If I helped out click the Accept Answer button and press that up arrow on the right. It really helps me both in the long and short run.

Ad

Answer this question