# How to move a part in object space?

How do I move a part for example 2 studs in the z axis of the part. When I flip a part 90 degrees and add 2 to its Z position, it changes the X axis instead. How do I make it so it changes the Z axis and not the X axis.

1 Like

Well thatâ€™s because the part is flipped. When a part is flipped (essentially when a 3D or 2D grid is flipped), the axes flip as well. Meaning the positive side of the X axis for example,becomes in the place of the negative one, and vice versa, for all axes.

The part is not moving the X axis instead of the Z axis (from what Iâ€™m understanding), itâ€™s going to the other side of the Z axis instead lf the wanted one.

To fix that, simply:
Move 2 studs in Z first,
then rotate.

The X axis might exchange places with the Z axis, if you rotated along the X or Z axis (meaning Vector3.new(90,0,0) or Vector3.new(0,0,90))
It seems that you rotated first.

How to do that with a script? Because in my script the part is rotated to an angle. Not just 90 degrees. That was just an example.

Just flip the two lines you have

``````part.Position = part.Position + Vector3.new(0,0,2)
part.Orientation = Vector3.new(0,90,0) --or any angle you want
``````

How to do it without rotating the part to 0,0,0 because in my script that does not seem possible/it can make the code dirty.

``````cl.CFrame = CFrame.new(p1.Position,p2.Position)
local orient = cl.Orientation
cl.Orientation = Vector3.new(0,0,0)
cl.Position = cl.Position + Vector3.new(0,0,-mag/2)
cl.Orientation = orient
``````

Doesnâ€™t work here. ^

Do it with the first line I guess.

``CFrame = CFrame.new(p1.Position+Vector3.new(0,0,2),p2.Position)``

I have already tried that. It still moves in the global z axis and not the partâ€™s.

Try this:

``````cl.CFrame = cl.CFrame * CFrame.new(0, 0, 2)
``````
6 Likes

Do you want the global or local Z axis? Your first problem described that it was going in the X axis, assuming thatâ€™s the global X axis, this means itâ€™s going in the local Z axis.

1 Like

I think I didnâ€™t describe it correctly. I meant when the part is rotated and I add 2 in its z axis it moves on global z axis instead of the partâ€™s.

Adding a Vector3 to a CFrame should translate it in global/world space. Multiplying a CFrame by another CFrame would move it in local/object space.

1 Like

Couldnâ€™t you do something like this? It doesnâ€™t set the partâ€™s rotation to 0.

``````part.Position = part.Position + Vector3.new(0,0,2)
part.CFrame = part.CFrame * CFrame.Angles(0, 80, 0)
``````