“Child of … [rotation]” doesn’t seem to properly change the child object’s local space. For example, take an empty object "child of"ed to the rotation of another empty rotated randomly. It will have matched the rotation of the other object. Now try to move it along its local x-axis. If you are seeing what I’m seeing, it ends up moved along the local x-axis it would have if the constraint was not affecting it!
With that behavior, this method would not work for what you want it to. But there are ways to do it! Here’s the method I used just this last week. It assumes the following:
- You can move the armature (excluding the feet’s IK targets) around by moving some “center of gravity” or “Allfather” bone around and leaving the armature OBJECT itself in the same place;
- Your armature has legs rigged with inverse kinematics (IK targets for the feet not children of the Allfather bone, so you can leave the feet in the same place on the ground even as you move the body around above,)
- You have a walk cycle that has the figure moving forward in space; that is, the center bone moves forward, and when you play the walk cycle, the feet do not seem to slip on the ground, but the figure moves continually forward (f-curve modifier: “cycles” helps here, provided you aren’t putting other actions in with the NLA editor; I haven’t gotten that far yet.) This may not be standard practice, I don’t know, but it’s what I did, and it has worked for me in this case.
Try the “follow path” constraint again, only put it on these bones of the armature: the parent bone of the main structure, and the two IK feet targets. Scale the “frames” and “evaluation times” under “path animation” for the path you are using for your object’s motion until an “offset” of 1.0 on the “follow path” constraint moves the constrained object or bone along the path by as close to 1 unit as you can get. (I would recommend trying this with another object first to properly scale the path; you may need to switch the path’s direction.) Then copy the keyframes you had on the “forward” axes for the parent bone and the feet targets to the “offset” on the “follow path” constraints for each of them, and clear the keyframes from the original forward axes. The path is now your new (bent) forward axis. When done, your character’s feet will not slip on the ground, (if they didn’t before,) even though it is not walking in a straight line.
You may be able to modify this technique to fit your armature. It MAY not be necessary that the forward motion for most of the object be done by moving a center-of-gravity bone, but I’m pretty sure that it is necessary to have IK feet targets continually moving along a forward axis (that you can replace with a path) in order for them not to slip on the ground. It may also not be necessary to have offset 1.0 units exactly equal original space 1.0 units, though the length of your character’s stride will change length accordingly.
This will not be so simple for every case (How do you start and stop? Is it easy to go up and down curved staircases? Can you move from one path to another?) I hope to find out the answers to these questions myself, and I hope that this works for you. If it doesn’t, I hope something does, but rest assured, it can be done!