I’ve encountered several bugs (quite possibly with a single underlying cause) relating to how arrays of interfaces are handled in the Details panel of the editor.
To reproduce these bugs:
- Create a new blank blueprint project and save the current level as “TestLevel”.
- Create a blueprint interface called “TestInterface”.
- Create an actor blueprint called “TestActor” which implements “TestInterface”.
- Create another actor blueprint called “TestContainer”.
- Give “TestContainer” a publicly editable variable called “TestArray” whose type is a “TestInterface” array.
- Add instances of both “TestActor” and “TestContainer” to the map (do not rename them!).
- In the Details window of the “TestContainer” instance, click the plus sign on the “TestArray” property to add an element to the array.
Now take the following actions in the same Details window:
Click the yellow “Reset to Default” arrow on the “TestArray” property; the editor crashes.
Attempt to add the instance of “TestActor” as element 0 of “TestArray”; no object selector pops up, and no other method of populating the element has any effect.
Rename the instance of “TestActor” to “TestActorInstance” (so now the instance doesn’t share the same name as the blueprint); if you now manually type “TestActorInstance” into element 0 of “TestArray”, the word “None” will be replaced by a path to the asset (e.g. TestActor_C’/Game/TestLevel.TestLevel:PersistentLevel.TestActorInstance’). At this point, the reference works as expected (e.g. you can Get TestArray inside a function and it will properly return the “TestActorInstance”).
As noted by another user who encountered this behavior: “this appears to be a bug with the user interface in the editor, and not anything to do with how interfaces operate. Interfaces work exactly as expected, but they appear as a path (to an actor in the scene) in the editor, rather than a selection box as it is for other types” (see this thread for the full post).