Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How To Fix A Moving Object Colliding With Other Objects?

To start of, I am new to scripting, and not sure what is happening. I have a WW2 Plane Mesh I inserted. The script lets you click on the canopy, it then moves from its "start position" to the new given position. The "canopy" is the part of the plane that slides back to let you sit down. When I tested it, it collided with another part of the mesh and got pushed/moved up. When you click it, it stays at the same height, and moves back to the "start position." I tried turning off CanCollide and nothing seems to work. I cant figure it out.

Is there any way to make it so it goes to the set location without being raised, or hitting other meshes/parts?

open = true
Part = script.Parent
Model = game.Workspace.Model.Canopy

Part.ClickDetector.MouseClick:Connect(function()
	if open==true
	then
		open=false
		Model:MoveTo(Vector3.new(3.741, 11.572, -5.2))
	else
		open=true
		Model:MoveTo(Vector3.new(0.741, 11.562, -5.2))
	end
end)

https://gyazo.com/95ff30699370657aa7ebfb3914d90420 https://gyazo.com/1903bfe718cce649ff96239ec167941f https://gyazo.com/2d1d7339732c387074c159367858ed47

Thanks, GIennMiller.

1 answer

The reason this is happening is because when you change a part/model's position, MoveTo changes the position, the game will make sure things don't overlap, we can't stop this by changing CFrame instead.

Lets use the :SetPrimaryPartCFrame() function to move/orientate the models

First make sure your model has a PrimaryPart set

Before you set the model's parent, use the function to set its position

We can change its orientation using CFrame.Angles() CFrame.Angles uses something called radians. You may be more known with the term degrees instead, roblox gives us a way to easily change degrees to radians without us having to math using math.rad(degrees)

local model=model
--position and orientation
local cf=CFrame.new(0,0,0)*CFrame.Angles(0,math.rad(90),0)

--setprimarypartcframe take a cframe value which is applied to the model's primarypart
--the other parts are moved along with the primarypart
model:SetPrimaryPartCFrame(cf)

So assuming the model has a PrimaryPart

open = true
Part = script.Parent
Model = game.Workspace.Model.Canopy

Part.ClickDetector.MouseClick:Connect(function()
    if open==true then
        open=false
        Model:SetPrimaryPartCFrame(CFrame.new(3.741, 11.572, -5.2))
    else
        open=true
        Model:SetPrimaryPartCFrame(CFrame.new(0.741, 11.562, -5.2))
    end
end)

If the model has Anchored false and CanCollide true, you may still need to do some adjusting such as making thing CanCollide false.

1 comment

0

if open then open = not open

This discussion is preserved as it was. New answers, comments, and votes are closed.