Say you had two differerent sized objects that the player could hold with one hand. One is small enough that the fingers would need to be moved fairly close together (a book for example), while another (let’s say a sword) would have the hand open slightly. How would I achieve this? Does it have to be done with a blended animation, or can the bones be manipulated at runtime?
Here’s what I have so far, the object simply parented to a box parented to a finger bone with an offset:
This isn’t pretty to look at, the hand should be closed around the object.
As an animator, I think having a “handful” of additive hand poses is by far the easiest, cleanest solution. This basically means having anim sequences with the character in it’s default (t-pose) or idle pose with only the fingers posed. One anim for your sword pose, one for the book pose, etc. These could then be additively layered onto your animation in the character’s Anim Blueprint (using an Apply Additive node).
If you’re not familiar with or don’t have access to Maya or Max or whatever, you could still pose the fingers and switch between the poses using SkelControls in the Anim Blueprint. This method would be grungy and kinda tedious to set up as you would need to basically plug rotation values for the finger bones into the Skeletal Controls until you were happy with the hand pose you created. FYI, in the animation section of the Content Examples, there’s an example of us using a skelControl to scale a character’s head.
Yep, and you can specify what the base pose is in the animSequence itself. Under Additive Settings → Ref Pose Type. If you select ‘ABPT_RefPose’, that’s basing the additive off of your character’s t-pose. AnimFrame and AnimScaled allow you to select the animation to use as your base. So, in the above example, you could pose the fingers on top of a run animation as long as you pick that run animation as the ref pose/anim.
A handy feature in Persona (the anim viewer) is Show → Additive Base. That will superimpose a skeleton with the additive base animation over the currently displayed animation.