local plr = game.Players.LocalPlayer
local sand = workspace:WaitForChild("Sand")
game["Run Service"].RenderStepped:Connect(function()
if plr.Character then
local hrp = plr.Character:FindFirstChild("HumanoidRootPart")
if hrp then
local Pos = hrp.Position
if (Vector3.new(Pos.X, sand.Position.Y, Pos.Z) - sand.Position).Magnitude >= 300 then
sand.CFrame = CFrame.new(Pos.X, sand.Position.Y, Pos.Z)
end
end
end
end)
For the visual part, you can have a Block Mesh that has the scale to something along the lines of (1000,1,1000)
.
If you do want it to be actually infinite and not just an illusion, then you need a bit of code.
What I recommend doing is having a very long wait() loop. Unless the player is specifically looking for the moment that the part moves, it’s also not noticeable.
-- LocalScript
while wait(60) do
workspace.InfiniteBaseplate.Position = Vector3.new(HumanoidRootPart.Position.X, workspace.InfiniteBaseplate.Position.Y, HumanoidRootPart.Position.Z)
end
Do keep in mind that this is not a functional script, you’d have to get the HumanoidRootPart yourself, this is merely the command that would do the movement itself.
procedural generation,
you are on a baseplate.
there are 8 baseplates around that bseplate , when you cross over to the next base plate 8 more load around that one and the ones that are far away get despawned/:Destroy()ed
you are the little purple dot
you move across here the ones in red get destroyed and the new ones load