Why are keyframes in global coords, instead of local coords? (Blender 2.70a) So, I've been using Blender for several years, including a fair amount of animation, and in the past it's always been useful to align an object with its local coords. I.e. having the y-axis pointing down the nose of an airplane makes it much easier to animate.

However, I recently noticed that the keyframes aren't recorded in local coordinates (anymore?), but in global coordinates. This makes animating off-axis rotation very difficult.

Changing the rotation mode doesn't seem to help (Euler, quaternion, etc.).

Unfortunately, I can't upload any examples because the project is proprietary, and I don't really have time to setup another animation, but the example goes something like this: I want to animate a record rotating in a record player, but the player is not sitting flat, it's tilted at an angle. Normally, this wouldn't be a problem. Just model the record with z up, and you can tilt the record at whatever angle you need so that it sits on the tilted player, and still rotate the record around its own z-axis, right? Unfortunately, this is not what's happening. Instead, I animate it rotating 180d twice and it wobbles all over the place because it's interpolating global coordinates, not local coordinates.

EDIT: Here's a demo afterall: https://www.youtube.com/watch?v=nimTjEYwcnE

It maybe a little hard to see because it's so fast, but the second time I animate the cube, it wobbles instead of rotating around its own z-axis like I expect it to.

Does anyone know what magic button I pressed that did this?

Or am I just crazy and remembering something that has never been possible? It's happened before...

EDIT: In fact, I KNOW this has worked before, cuz I just went back and looked at some old stuff, and I know I animated using the local coordinates then... I'm gonna go see if 2.70 behaves differently from 2.70a...

EDIT: Nope, 2.70 behaves the same way.
Sometimes this problem can be "solved" by choosing a different Rotation Mode.  "XYZ Euler" is popular (because it is the default), but sometimes people pick a different one, either to avoid gimbal lock, or to achieve a particular animation effect.

However, the general purpose solution is to use parenting, either the genuine object parent field, or a Child Of constraint.  You tilt the "parent" such that one of its axes is what you want to rotate around (lined up with the spindle of the record player), then animate the rotation of the record around a single axis.  As you can see from the many comments, there are a couple of different ways to accomplish the effect you want, and each one has its pros and cons.

The Humane Rigging series has a few videos that might expand your understanding, the one I'd start with is Humane Rigging Chapter 3 part 3 although you will probably want to watch part 2 and 4 when you have some spare time.