How to update face control rig using slider in Editor Utility Widget?

I’m trying to set up an Editor Utility Widget for controlling the Face Rig of a Metahuman in the sequencer.

I’ve managed to figure out how to get the control rig of the selected actor and set the value on the rig using a slider. However, even though I have set the functionality up on the ‘On Value Changed’ event for the slider, the rig actually only updates when I release the mouse from the drag. I can see in the output log (by printing the values as they change) and on the control rig in the sequencer that the values are being updated during the mouse drag, but the actual face rig itself doesn’t update until I release the mouse from dragging the slider. This makes it slightly useless as an interactive slider.

I’ve been looking through the available nodes to use with the ‘Control Rig Object Reference’ I’m using in the script, but nothing seems there to update the rig, with the exception of maybe the ‘Execute’ node, which I have been trying to make do something but haven’t figured it out yet.

Does anyone know how to make the rig update during a slider drag?


So after digging a little further this seems to be an issue with the mouse button being down/dragged.
I have two versions of the logic: (1) where you have to click and drag to make a change to the control, and (2) where as long as your mouse is over the widget then it will update according to mouse position, no click+drag required.
In the attached video, you can see that in (1) the rig only updates when I release the mouse, and in (2) the rig is constantly updating.

However, the functionality of (2) is not feasible, I need to be able to click drag to make the change otherwise it makes no sense.

Is there something going on when the mouse button is down to stop the rig from updating? That doesn’t really make sense because you can click and drag either the values in sequencer or the control rig face board in the actual scene and move of those update interactively.

Anyone help me?

It’s been a while since I was deep in code on UE4 but is it possible the event(s) are being swallowed up? (ie. option to pass on event to other functions or to use it locally and not pass it on)

Hey! Someone helped me out on Discord.

The answer was that slate was throttling the game loop. Setting Slate.bAllowThrottling = 0 did the trick!

4 Likes

Hey, any news on this? Can you share some code, it is near impossible to findo online resources on how to acheive this!

For those stumbling across this post like me, the solution indeed lies in the throttling of the slate.
By calling the console command Slate.bAllowThrottling 0 you can disable this and update your actor. In your widget you could do the following: