Multiple bones - Follow Path constraint doesn't work

Hi. I’m trying to figure out how to make multiple bones follow a BezierCurve. I’ve got 9 bones, and on each of them, I added constraint Follow Path, set target, checked Follow Curve, chose axis that points forward in my case is that -Y and clicked on Animate Path.

Now the weird thing that is happening is that when bones get to the curve part of the path, they don’t follow ass they should.

Here is my .blend file: Bones_FollowPath.blend (547.8 KB)

On frame 50 they start to derail off the path and on the frame 70 is obvious that something is going really wrong.

1 Like

Hey, Instead of using the animate path option, animate the 'Offset", you have much better control. My guess is you prob used ‘copy to selected’ which won’t give you what you want since it uses the last selected (active) location.

1 Like

A follow path constraint is like a curve constraint-- it takes the existing position of the objects into consideration. It’s designed for objects that move in only a single world axis (before the follow path constraint is taken into consideration). That happens to be roughly the right axis before the bend. After the bend, the parenting means that the bones move out of that axis.

As ajcdfin has said, you could do this with fixed distance and offset, but you’d also have to unparent all your bones, and either drive or manually set offset for each bone, for each keyframe.

A better way might be to look into the use of the “clamp to” constraint instead of the follow path constraint. With your parented bones, I think it will be more what you’re looking for.

1 Like

Hey, as Bandages said;

That means they all need to be at the ‘Origin’ point (Edit mode). I have a solution for you now I have looked at your file. Tab into ‘Edit’ mode with the Armature/bones, select ‘Bone’ > snap cursor to it > set ‘pivot point’ to 3D cursor > select all > S - Y - 0 (zero). That will stack them, back to ‘Pose’ mode, ‘Follow Path’ Constraint - “Bone.007” ‘Offset’ = (-4), “Bone.006” = (-8), “Bone.005” = (-12) -etc. “Bone” = (-32). Now they will all have the original spacing you had, but if you play it, they will run into each other at the end. To fix this, select “BezierCurve.001” go to Curve Data Panel and look for ‘Path Animation’, right/left click on the ‘Evaluation Time’ > Clear KeyFrames. Now set a new KeyFrame (make sure your on the right ‘Frame’ in the ‘TimeLine’ (where the Play/Stop buttons are). Set the ‘TimeLine’ frame to when ever you want to end at, then move the BezierCurve.001 - ‘Path Animation’ - ‘Eval Time’ to where the first bone stops at the end of the path > set KeyFrame, should be 68.000. Now you will have a good fcurve in the graph editor you can work with. Hope this helps and I didn’t forget anything. :wink:

1 Like

Thanks for helping. It works perfectly now. :grinning:

1 Like

So now I ran into another problem. Those bones that I needed help with, are a part of an Armature, so there are other bones that I don’t want them to be affected by Follow Path constraint. But as soon as I add Follow path constraint other bones shift. My Armature origin is at 0,0,0.

That is probably due to ‘parenting’, if they are children of any of those bones they inherent their parents action. If this is the case, then you will have to use a ‘Child of’ constraint and animate the ‘influence’ slider - but that may also lead to other issues, which will require adding other constraints like copy Loc and/or Rot. With out knowing your ‘Main’ objective, that’s about the best answer I can give you.

I’m working on Tesla Cybertruck. So I rigged door, tires etc. And I have a problem with this roof that should nicely roll in. I can’t even get one bone of that roof to stay in the position that it should. I set the origin of the armature, mesh and curve to 0,0,0. And in the end I need this to work for export (gltf). I animated other parts and exported them and everything is working as it should. Only this roof I can’t get ti to work.
Here is my blend file: Cybertruck_Roof.blend (956.1 KB)

Hey, I will take a look at it. But, did you realize your curve has two axis that are rotated ? That could be causing an issue somewhere down the line - that’s why the ‘path’ const bones jump when you dis=able the consr.

No, I didn’t realize that. How can I see that? Because I thought that when I apply All Transforms it’s all put at 0,0,0 and it should work. But now I made a few other curves and it still doesn’t work. I made one at the same place as the old one and I applied all transforms and it still won’t work. Neither won’t others that I made at the center 0,0,0.
Here is my bled file with a new curve in the same spot. Cybertruck_Roof2.blend (954.5 KB)

Hey, Sorry, I was referring to your first file. Well, the only way I ever get this kind of stuff to work, is doing everything at 0,0,0. I move the curve in edit mode so that its starting point is at that location, which is its origin point. Same goes with the armature. Anywho, I fixed the first file, so that means I did move it - pretty sure I got it back to its spot, double check that and if its not, unlock the transform locks and move it (Curve - object mode). Two major changes I made are; making all those trunk bed bones their own armature and using the trunk bed bone to make it move, it drives the evaluation time when you move it on its local Y axis. If this is not going to work for you, just delete the driver on the curves Eval Time and key frame it. I did it that way so its not ‘time’ dependent, which gives you much more flexibility. Let me know if you have any more issues or I missed something :grinning:

PS; I think I forgot to put all your stuff back on the same layer (collection 2.8) This was done in 2.76 - so you will have to ‘APPEND’ the objects from the Object folder into your version.

1 Like

It’s working perfectly. Thanks for helping me. :grinning:

1 Like