I know there are already numerous posts on this topic, however I can’t find any of them correctly solve the issue, or just don’t make sense. I want to know how to get the direction a part is moving. i assumed this would be velocity, but it appears that in Roblox velocity is compared to world origin instead of the part locally. In fact, I found this is how most attributes work in Roblox regarding AssemblyLinearVelocity, AssemblyAngularVelocity, Cframe.LookVector. It’s very confusing and doesn’t make sense to me. Can someone help me figure out how to determine the direction an object is moving? It would be useful to have a vector3 which has the movement/speed/velocity of the object relative to the object’s faces; forward/backward in the x axis, up/down on the y axis, left/right on on the z-axis.

CFrame.LookVector gives you the direction of the front face, CFrame.RightVector gives you the direction of the right face, and CFrame.UpVector gives you the direction of the top face. Make each direction a negative to get the opposite side’s direction (eg: -CFrame.RightVector == Direction of left face).

this isn’t useful in determining which direction the object is moving. It only gives the direction it is looking at, which i don’t understand. what do you mean “looking at” , looking at what?

It returns a Vector3, each value being -1 to 1. These values depend on the orientation of the part, and the best way to visualize this is just by printing the CFrame.LookVector and looking at how the values change over rotations. If you need more explanation, feel free to ask.