I have a placement system that places parts and models along a grid. When I place models it works fine until the model is touching another object (Including the player). What happens is the model jumps on top of the object until you move your mouse off of the object. On most placement systems the models just move though the other objects but don't let you place the object. I am not asking for collision detection. I set CanCollide
to false on every object in the model and still get the same result. Whats weird is that when I am placing a Part and set CanCollide
to false it just moves through everything. Is there a simple way to make models move the same way that parts do?
Here is my code:
local Player = game.Players.LocalPlayer local Mouse = Player:GetMouse() local PosX local PosY = 2 local PosZ local Model local Toggle = nil local Gui = script.Parent local Button = Gui.TextButton local Button2 = Gui.Model1 local IsPlacing = nil local GridId = "rbxassetid://13786085" local function SnapToGrid() local Snap = 2 local Grid = 2 local RoundVariable = 0.5 PosX = math.floor(Mouse.Hit.X / Snap + RoundVariable) * Grid PosZ = math.floor(Mouse.Hit.Z / Snap + RoundVariable) * Grid end local function Placement() if Toggle == true and Model:IsA("Part") and Mouse.Target and Mouse.Target.Name == "Baseplate" then local PlacedModel = Model:Clone() PlacedModel.Parent = workspace.Clones Toggle = nil IsPlacing = nil game.Workspace.Baseplate.Texture.Texture = "" Model.CanCollide = true elseif Toggle == true and Model:IsA("Model") then local PlacedModel = Model:Clone() PlacedModel.Parent = workspace.Clones Toggle = nil IsPlacing = nil game.Workspace.Baseplate.Texture.Texture = "" local ModelProperties = PlacedModel:GetChildren() for _, Children in pairs(ModelProperties) do Children.CanCollide = false -- I even set CanCollide to false via the script end end end local function Movement() if IsPlacing == true and Model:IsA("Model") and Mouse.Target and Mouse.Target.Name == "Baseplate" then Mouse.TargetFilter = Model SnapToGrid() Model:MoveTo(Vector3.new(PosX, PosY, PosZ)) Toggle = true local ModelTable = Model:GetChildren() for _, Children in pairs(ModelTable) do Children.CanCollide = false Children.Anchored = true end elseif IsPlacing == true and Model:IsA("Part") and Mouse.Target and Mouse.Target.Name == "Baseplate" then Mouse.TargetFilter = Model SnapToGrid() Model.Position = Vector3.new(PosX, PosY, PosZ) Toggle = true Model.CanCollide = false Model.Anchored = true end end local function StartPlacement1() if Player.leaderstats.Cash.Value >= 50 then game.Workspace.Baseplate.Texture.Texture = GridId Model = game.ReplicatedStorage.Movement:Clone() Model.Parent = workspace Mouse.Move:Connect(Movement) IsPlacing = true Player.leaderstats.Cash.Value = Player.leaderstats.Cash.Value - 50 end end local function StartPlacement2() if Player.leaderstats.Cash.Value >= 100 then game.Workspace.Baseplate.Texture.Texture = GridId Model = game.ReplicatedStorage.Tree:Clone() Model.Parent = workspace Mouse.Move:Connect(Movement) IsPlacing = true Player.leaderstats.Cash.Value = Player.leaderstats.Cash.Value - 100 end end Button.MouseButton1Click:Connect(StartPlacement1) Button2.MouseButton1Click:Connect(StartPlacement2) Mouse.Button1Down:Connect(Placement)
I don't know if there is a simple way to do this. Also i'm not asking for a whole placement script.
Thanks to who ever helps me!