Difference between result change and value change on decorators

I assumed that the difference was that results change means the value stored is different, while value change just fires every time the variable is set.

1 = 2: result change
1 = 1: value change

From my own experimentation it seems I was wrong. What is the true difference?

It appears to be broken, I added new issue for it (UE-16106).

Value change should send restart requests each time the value in blackboard changes. Best suited for reevaluating tree when key type supports only basic operator (set / not set), for example: object key with current enemy. It’s supposed to either restart current branch, or leave it when new value doesn’t satisfy decorator’s condition.

Result change sends restart request only when result of decorator’s condition is changing. For example: range check will restart when leaving melee range, but ignore any further ranges because it doesn’t matter for the condition’s result (still out of melee).

Hi there, thanks for the response. I’m not quite sure if I understand you.

If I have an Enum, with values of Foo and Bar - result change will trigger when it changes FROM Foo TO Bar. But value change will trigger if I set it from Foo to Foo… right?

I haven’t tested but I’m pretty sure setting from Foo to Foo should never fire.

Imagine your enum has Foo, Bar and Baz. I think what Lukasz is saying is that if your decorator condition is Value == Foo, then with ValueChange, any change to a new value will cause the evaluation to trigger. With ResultChange, setting from Bar to Baz (or vice versa) would not retrigger, since the result of the condition (Value == Foo) was false before and is still false afterwards, so whilst the value has changed, the condition result hasn’t.

Having said that, personally I haven’t found a need yet to use the OnValueChanged setting.

Is it already fixed?

I have a simple decorator that checks if a value of float is greater or equal than some value. It seems that even tough I set “notify observer” to “on result change”, it is fired every time the value is changed.

Is it already fixed?

I have a simple decorator that checks if a value of float is greater or equal than some value. It seems that even tough I set “notify observer” to “on result change”, it is fired every time the value is changed.