0
$\begingroup$

how can I make my animated robot pick up an object (a pole) without making two separate animated key signatures one for the robot and one for the object?

$\endgroup$
0

2 Answers 2

1
$\begingroup$

The object can be parented to the empty, and the empty can be constrained to the robot's arm. You will need to use keyframes to control the constraint on the empty. That's how I usually do it. Then you can animate the object independently if you want to. It's hard to answer this question without more information about the problem and your current ability with Blender. Are you a beginner? How are you currently animating this and what is giving you trouble?

Anyways, if you're totally averse to using keyframes on anything but your robot rig, add a bone to the rig where the object will be when it is held (Object-Socket). Duplicate the bone (Object-Parent). Now, remove any parents from object-parent by pressing alt-p, and make sure object-socket is parented to the hand bone (or whatever the robot is picking it up with). Create a Copy Transforms constraint by selecting the object-socket bone and then the object-parent bone (order matters) and press shift-ctrl-c --- choose Copy Transforms from the menu. Now, parent the object to the object-parent bone. When the Copy Transforms constraint on object-parent is enabled, the object will stay in the hand. When it is disabled, the object-parent bone will return to its place, which can be animated as normal (and may look like a jump when you disable the constraint. To fix this, turn the constraint back on, press the I key and set a keyframe for Visual location/rotation/scale, then turn the constraint back off. the object should now be in the position it was in with the constraint, but it no longer follows the hand. This is useful when the object needs to be put back down, thrown, etc.). I wouldn't really reccomend doing it this way unless you have a reason not to use the first method, which I think is cleaner. And of course the visual location/etc. keyframe trick works on any constrained object. I'll add more detailed explanation if you need me to, but if you're unsure about rigs/armatures, constraints, parenting, etc. the first thing you should do is study those features of Blender, since they're essential to animation. There's no need to be a superstar rigger, but an animator should understand the basics.

I hope this is helpful.

$\endgroup$
1
  • $\begingroup$ I like your answer and I would be interested in a more detailed explanation as I am encounting difficulties with using the Child Of constraint doing a similar type of animation, and I am new at using Blender. Thanks for any extra info. $\endgroup$ Commented Dec 7, 2019 at 11:52
1
$\begingroup$

You can do it with a Child Of constraint:

  • Move your robot hand (whether it's a bone or an object).
  • Give your pole a Child Of constraint with the hand as Target.
  • The frame before the hand picks the pole, give the constraint an Influence of 0 and create a keyframe on this value.
  • The very next frame, rise the influence at 1 and create a keyframe. Now the pole follows the hand.
  • The frame before the hand drops the pole, create keyframe LocRotScale on the pole and create a keyframe on its constraint Influence at 1.
  • The very next frame, create a keyframe Visual LocRotScale and create a keyframe on its constraint Influence at 0.

Why Visual LocRotScale keyframe? If you didn't do that, the child object would go back to the location it got before its parenting, because a child always keeps its original location (i.e. the location it got before it was parented) as reference. For example if you move a parent, the child will visually follow, but if you unparent the child with a simple Clear Parent and not Clear and Keep Transformation, it will jump back to its original location, the one before you parented. On the contrary, if you give it a Visual LocRotScale keyframe, it means you consider its visual position, the one it got while parented and moved by its parent, as its new location, so if you unparent it it won't jump back to its previous location.

$\endgroup$

Not the answer you're looking for? Browse other questions tagged .