You can create an MCG controller that can be applied on top of an existing animation controller on an object in a scene and use its output as input. This provides an alternative to the workflow of applying the topmost controller first, and then applying additional controllers on its inputs.
To do this, the graph must have a parameter node to receive the output of the subcontroller. Then, you edit the Custom UI property to add a handler for the copy event.
You can also add a handler for the setValue val commit event. This passes through the value from the subcontroller, and lets you interact with the subcontroller as if it was still the active controller. For example, this lets you create an MCG controller that gets applied on top of a standard position controller to clamp the position, and still allows you to move the object in the viewports using the Select and Move tool.
on copy source do ( --Grab the current controller and use its value to drive this controller. try ( this.SubController.controller = source ) catch ( this.SubController = source ) return true ) on setValue val relVal commit do ( --Set the value of the subController. --This controller acts like a pass-through. try ( SubController.value = val ) catch ( SubController = val ) )
Note that some controller types have controller and value properties, while for others you set the controller itself directly. You can either use try/catch as above, or just use whatever is appropriate for the specific parameter type.