Order of Blueprint execution option?

Hello Epics,

Is there currently a way to tell the engine what order to execute one’s blueprints?
Sometimes I feel the need to know if one is executed before another so that I can be sure that some calculated data is going to be available in the same tick.

I was thinking it would be cool with a (optional) way of setting priority values for your objects asking for them to be sorted before you run the game and then executed in turn accordingly.

Am I missing something or would this be useful?

Cheers

Can’t you use the Sequence node?

The sequence is just for use within a BP.
Does not have anything to do with the engines’ order of BP execution.

You could call your actor functions in the desired sequence from a common point.
There is no (feasable) way to influence the order on which objects are processed.
That depends on too many things to account for.

Could you please elaborate on your first sentence there? Im not really clear on what you mean?

What do you want to achieve?

Lets say you have 5 actors in your game and each one is supposed to do something OnTick.
For some reason you want the actors to do that in a specific order.

  1. Make all these actors non-ticking
  2. Create a BP interface and define a “DoStuff” function there.
  3. Add the interface to your actors
  4. Put the OnTick code in the implementations of that function
  5. Go to the level blueprint and get references to those actors
  6. Level BP OnTick: Call the DoStuff functions of your actors in any way you desire

So your actors are doing their thing in a predetermined order each tick.

Another alternative is to have each object have a “last ticked time” variable. When asking for state from an object, pass along “state for time T.”
If the “last ticked time” is less than the time T, then the object will evolve itself forwards to time T, else it will return already-evolved (cached) values.
Similarly, in Event Tick, the object would ask for its own state at time (latest game time) to make sure it evolves even if nobody else asks it for state.

This mechanism is often used in simulation between interdependent objects, as well as when you have a log of previous time-states (for rewind, lag compensation, etc.)
It does add overhead in each variable read/query, though, so if you have thousands of objects, another option might be better.

@Fredrum here: 'Begin Play' Execution Order - Community Content, Tools and Tutorials - Unreal Engine Forums

@KVogler
Thanks that sounds like a interesting and possible solution. I’ll do some experiments on that.

@jwatte
I’ll have to read that more times to grasp what it means and how that would be implemented. :slight_smile:

@Bruno

That sounds cool and very similar to my thinking except you do it for BeginPlay and I think I would need it for Tick.
(begin play would be great too as I have similar dodgy Delay nodes here and there) I’m trying to not get into coding much and I would have to re-cast my Characters to inherit from a custom (Character inherited?) class it sounds like, right?
I’m not that used to the programming side yet but could possibly do something if not too complicated. Is that added just as a separate new class or would I have to modify/add to engine code?

EDIT: Basically I have Characters that are made up by three interdependent Actors and that frequently ask data from each other. The first one gets Motion Controller tracking data, second one is a IK rig using that and third one a Character using mainly the IK rig but also the first. Some flow design improvement’s are probably possible but I want to be sure to have the smallest latency possible with the MC data flow and not have the risk of using ‘previous tick’s’ data.