How to assign StateTree parameters at runtime

Has anyone found a way to assign / update values to a StateTree parameter?

1 Like

Yeah it get’s complicated. You have to use your evaluator in combination with your actor to pass information back and forth.

So you can’t update the parameter specifically, you use those as default values, pass them into your evaluator and then adjust there.

Hopefully that makes sense.

Does that work, sure, does it make sense? That is another story. The current workflow I have found makes parameters useless. If I am going to have default variables or anything I need to update or set from outside the actor using state tree I have to set up a bunch of variables on the actor. Was hoping this would be more like Blackboard and Behaviour Tree than needing to make an external data housing component or the such.

Can you elaborate? I tried what you described but it’s not working.

The parameter in state tree:

The variable in the evaluator:

Changing the variable’s value in the evaluator did not update the corresponding state tree parameter.

As far as I know, parameters are “set once, read only” data. If you want runtime parameters, you have to

  1. Make a task, global task or evaluator where the variable will be calculated.
  2. Make your variable in this object.
  3. Make it instance editable (click on the eye), or in C++ make it VisibleAnywhere or EditAnywhere (I believe either should work)
  4. Move it to the Output category. It must be spelled correctly, it won’t work otherwise.
  5. Add the task or evaluator object to the tree. If you did everything correctly, you should see a gray bubble saying OUT and you won’t be able to bind to this variable (since you’ll be writing to it)
  6. Set this variable only from this object.

Other tasks and evaluators can then bind themselves to read from this variable.

This is a poorly documented feature, but I got it to work doing these steps.

1 Like