Controls having incorrect transforms when selecting animation spaces

I am using the control rig in Unreal’s Third Person Template in 5.5. I’m attempting to have the IK hand control use the control space of a new control I’ve created. This is where those new controls are in the heirarchy.

I’ve also made sure to disconnect the Arm IK logic in order to rule that out as an issue

And this is the result I get

Circled in Green is the target control, whose space I want to be in. Circled in Pink is the control I want to move to the control circled in Green.

As you can see, the ik_hand_gun_ctrl space is selected from hand_l_ik_ctrl. The transform is also zeroed. How come the hand_l_ik_ctrl isn’t in the same world position as the ik_hand_gun_ctrl? And how might I go about making it work?

It seems to be because the “Offset” transform is being set in the construction event, while initial is zeroed. Although it should be affecting the “Initial” Transform, shouldn’t it?

All of these Set Transform nodes are set to initial, so why would it affect the Offset transform instead?

Humm not sure what you are attempting. The need for IK should be built into the control rig design and not make use of the joints marked as IK as it is a misleading as to their purpose as being included as part of the hierarchy.

There are really only two practical reason for Epic to include them.

  1. Legacy as allowing past animation sets to work with the current UE5 design as to exaptation.
  2. To act as helper or accessory joints when authoring animations when using external animation applications such as Motionbuilder.

Typically when added as a helper the IK joint is “position constrained” to the appropriate joint like IK_gun would be constrained to the right hand but would be parented to the hand root which in turn parented to the character root. Once plotted the animation is applied to the IK joint so as to allow object interaction like switching weapon hands for things like operating a bolt action rifles.

Once imported into UE5 there really is no other use as part of the control rig design as UE5 does not respect the constraint system of any secondary animation application so to make it work as part of the control rig you would have to make your own position constraint

Oh right, I guess I should have clarified this before, but I’m just repurposing the ik bones. I know it’s not really what they’re for, but I’m just using the ik_hand_gun bone as a weapon bone and the ik_hand_r & l bones essentially as virtual bones that get baked into animations. But yeah they’re just being used as regular bones.

The main issue is that the ik controls for the hand bones on the rig have an initial “Offset” value assigned in the construction event (for moving the control to the hand bone’s transform), so when switching animation spaces, it applies that offset to that space, which is undesired.

So basically, I switch animation space, and instead of maintaining that global transform, the control applies that initial offset to the selected transform space. Which is a bit annoying to deal with

I was somewhat able to correct this behavior by having a bool control, which triggers a “switch parent” node in the control rig. However this causes a situation that requires a bit of fiddling with controls after applying, otherwise the transforms start wildly changing.

My thought is it’s more of an issue of needing either a better setup for space switching from the control rig, or having the control rig “recognize” when a space is being switch, then running logic off of that. Although there’s probably a better solution to it altogether that I’m unaware of.