A Vector3
is a location in space. It has an x, y, and z coordinate.
CFrames
are locations and orientations in space.
So, for example, if I tell you that my position is (4, 5, 0), you know where I am, but you don't know which way I am facing.
So if you want to set an object's orientation, you have to use CFrame
s, since Vector3
s do not contain any direction information.
You can construct CFrames in several ways:
CFrame.new( pos )
Where pos
is a Vector3, creates a CFrame at that position with the "standard" orientation.
CFrame.new( pos, toward )
where both pos
and toward
are Vector3s, creates a CFrame at the location pos
with a front that faces toward toward
.
So CFrames contain a lot more information. Internally, they're 4x4 matrices (Vectors are 3x1 matrices).
A totally unrelated issue is how Roblox handles assigning CFrame and Position in parts.
When you assign Position
or Size
, parts will automatically "exit" anything they get stuck in, by traveling straight upward. So, for example, if you try to bury a brick underground, it won't work, it will just sit on top.
However, assigning CFrame
doesn't do this extra "no intersection" stuff, so it will happily bury things if you ask it to.
From my own personal experience, it seems that CFrame is more precise. If you use Vector3 and it clips with an object, it won't go through the part it clips, it will round and put it above/below the part.
CFrame, however, wil allow you to clip an object.