Scrubbing Sequencer does not update Blueprint Variables

I’ve created a very simple blueprint (with one static mesh component) that has as variable AnimatedScale (editable, expose to cinematics) that calls Set Actor Scale 3D in the construction script and on Tick:

I’ve created a simple level and a level sequence. Then clicked Actor to Sequencer, added the Animated Scale track and inserted some keyframes. I would like to see the changes in Animated Scale reflected in the editor as I scrub through the sequence.

The problems:

  1. Even though I see that the variable
    value is updated in the details
    panel of the blueprint when I
    scrub the sequencer timeline, the
    blueprint does not update
    (probably since neither the event
    tick nor construction script is
    called).

109470-scrubbing+sequencer.gif

  1. When simulating (or
    play in editor) the value in the details panel does not update (nor does the blueprint). It is only after I move a keyframe in the sequencer when simulating that sequencer seems to be able to influence the object.

109481-scrubbing+sequencer+simulate4.gif

I can understand that 1. might be intended behaviour (although I then find it inconsistent that the value changes in the details panel) but 2. seems odd. Is there any (other) way I can see the updates in blueprint variables done by sequencer reflected directly in the scene?

3 Likes

I don’t see why construct shouldn’t be called when the timeline is scrubbed, it would make the sequencer so much easier to use.

You can achieve this functionality by creating C++ base classes for all actors\components you want to be updated in Sequencer.

Make following modifications in the in c++ constructor:

//bWantsBeginPlay = true;
PrimaryComponentTick.bCanEverTick = true;
bTickInEditor = true;

Then make new blueprint class inherited from this class.

Now your Event Tick always firing in editor.

Thanks! Scrubbing in sequencer while simulating seems to work as expected in 4.14 (so without having to move a keyframe first).

Blueprint only method.

  • Use Set[variable name] so that you have a setter event which is updated when the value is changed via sequencer
  • Note the setter event needs call in editor set to true
  • Set the variable
  • Call another event (not with call in editor for some reason) that does what you want with the value.
2 Likes

This works for me in 4.15. Thank you for sharing this. I’ve tried so many ways to get something like this to work.

This technique is really handy for two things:

  1. Updating one actor’s properties based on another actor’s animated properties’ automatically without having to animate both. (example below.)
  2. Setting properties with some configurable calculations based on a simple animated input. For example you might want to animate a curve for a property that goes between 0.0 and 1.0 but then have that mapped into a different range based on blueprint min, max variables you can change without touching sequencer.

To clarify what worked for me on 4.15

  1. Enable Blutility in editor preferences.
  2. Make a simple blueprint (I called mine SequenceHelper) and drop it in your level
  3. Edit your SequenceHelper blueprint and add a float variable called “Tick”
  4. Check the “Expose to Cinematics” checkbox for your Tick variable
  5. Add a custom event to SequenceHelper called “SetTick” with a float input called “New Tick”.
  6. Add your SequencerHelper BP Actor in your level to your sequence and add a track for “Tick”. You don’t have to set any keyframes.

If everything is setup right as you scrub through the timeline “SetTick” will get called. Now you can put whatever you want in there.

As an example in the screenshot below I have put a Skysphere reference variable in my SequenceHelper. (which I can set using the eyedropper tool to pick the level’s Skysphere). Then I animate the directional light. My SetTick function calls the SkySphere’s UpdateSunDirection function on every frame. So they are always in sync during playback or scrubbing without having to animate both seperately.

http://i.imgur.com/uaTrmLl.jpg

We went little bit different way.

“CustomTick” in actor BP fired by the component which can have tick enabled in editor.
Every actor we have derived from parent blueprint which has this functionality enabled by default.

It all works quite well, there are some parameters that need to be activated:

  1. Variable exposed to cinematics
  2. Variable instance editable (not sure if it is necessary, haven’t really checked without)
  3. You have to actually create a blueprint class to control your animation blueprint (and cast variables to)
  4. In the blueprint class (can be as simple as an actor) go to class settings and tick these 2 options:

  1. save bp class, go to sequencer and under playback options tick rerun construction scripts:

Hope it helps.
If not, let me know, I’ll check what other global options I’ve enabled to make it work.
I lost 3 hours just clicking around the engine trying to recreate my steps 2 weeks back.
Beacause, obviously, I forgot how I did it.

I hope this post pops up when I’m in trouble again. I think I might be a squirrel.

Cheers,
Kuba

4 Likes

Thanks that helped me out!

This should be accepted answer.

RUN CONSTRUCTION SCRIPT IN SEQUENCER! why is it off by default?? who would prefer this variable to be off/!

Please epic, please please please with sugar on top, can you make things easy or at least document it in a proper manner?

Is there a simple way to do this in UE5? I have a blueprint with an event tick animation and it does not work when I scrub my timeline in sequencer, frustratingly.

You’ll want to create an Event Repeater track for your specific object and hook up your blueprint event to it. Take look at the docs here:

So every blueprint actor needs to be added to my sequencer timeline and assigned the event repeater track? I have 100s of cars in my scene so was hoping that there was a simpler way

Thank you! I was having trouble getting the sun sky blueprint working in Sequencer and enabling 𝘙𝘶𝘯 𝘊𝘰𝘯𝘴𝘵𝘳𝘶𝘤𝘵𝘪𝘰𝘯 𝘚𝘤𝘳𝘪𝘱𝘵 𝘪𝘯 𝘚𝘦𝘲𝘶𝘦𝘯𝘤𝘦𝘳 fixed it.

additional rule -
do not use special symbols !!
the variable will not work in sequencer when the name have special symbols like { } or … .

its working while scrubbing but not updating in render … What should I do ??

its working while scrubbing but not updating in render … What should I do ???