Description

This issue was reported in the context of adding and setting parameters on StateTrees, Tasks and related assets, but its root cause lies in the structure FPropertyChangedEvent and can possibly affect other usage scenarios. It was verified in UE 5.4-5.5 using a struct-with-array-of-struct-with-array, and it was reproduced in UE 5.6-5.7 in the broader case of an array-of-struct-with-array, where a new check() is triggered, which represents a regression for some users.

The main issue is that FPropertyChangedEvent::ArrayIndicesPerObject stores the indices of arrays being changed in a property hierarchy as a map where the key is the array property name. As a result, when a property hierarchy contains two or more arrays with the same name, only the innermost array index gets stored. Function UE::StateTree::PropertyHelpers::DispatchPostEditToNodes() in UE 5.6+ catches this and triggers a check() when a change is made to an inner array on an index that does not exist on an outer array. Other situations, including this same function in UE 5.5-, do not trigger a check(), but the contents of FPropertyChangedEvent::ArrayIndicesPerObject can be verified to have the same issue.

Besides the new check() in UE 5.6+, another change that made the issue reproduce in a broader range of cases was that, prior to that version, the property name of an Array's inner type was "<ArrayPropName>_InnerType" when the array was a property defined in the editor (not in C++). Starting with UE 5.6, that property name seems to have dropped the suffix (and some kind of unique suffix is added when there are multiple nested array properties defined in nested BP structs). As a result, the problem now repros with an "Array property containing a Struct with another internal Array", if arrays have the same name. Previously, the repro needed at two structs, both containing arrays with the same name.

Steps to Reproduce

1. Create the following C++ structs:

USTRUCT(BlueprintType)
struct FMyCppStruct
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TArray<float> MyArray;
};

USTRUCT(BlueprintType)
struct FMyCppStruct2
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TArray<FMyCppStruct> MyArray;
};

2. Open the Editor inside the VisualStudio debugger
3. In the Content Browser, create a new StateTree asset with any Schema (e.g. StateTree Component)
4. Open the new StateTree

5. For UE 5.6 and later:
5.1. In the "Asset Details" tab, under category "Parameters", create a new parameter:
5.2. Make it an array of type "MyCppStruct"
5.3. Name it "MyArray" (important)
5.4. Add an item to the root array
5.5. Inside the new item, there is another array with the same name "MyArray"
5.6. Add 2 items to the internal array
5.7. This will trigger check(CurrentPropNode->GetNextNode() == nullptr) on UE::StateTree::PropertyHelpers::DispatchPostEditToNodes()
5.8. Function parameter "InPropertyChangedEvent" can be examined for the problem in the issue description

6. For UE 5.5 and earlier:
6.1. Place a breakpoint in UE::StateTree::PropertyHelpers::DispatchPostEditToNodes(), on the "return" under "if (!Helper.IsValidIndex(Index))"
6.2. In the "Asset Details" tab, under category "Parameters", create a new parameter:
6.3. Make it a single item of "MyCppStruct2" (name not important)
6.4. Add an item to the member array "MyArray"
6.5. Inside the new item, there is another array with the same name "MyArray"
6.6. Add 2 items to the internal array
6.7. This will stop in the breakpoint set previously.
6.8. Function parameter "InPropertyChangedEvent" can be examined for the problem in the issue description

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-358725 in the post.

0
Login to Vote

Unresolved
CreatedDec 19, 2025
UpdatedFeb 26, 2026
View Jira Issue