Yep, as others have said, if you want to store an array of classes, you need to create a blueprint for every variation of values that you need. This will work fine, but it is a little annoying to have to create a blueprint every time when all you’re doing is changing a value or two. There is another way to do this that lets you edit values inline, but you will then be storing an array of instances rather than classes in each object.
To do this, change your property to:
UPROPERTY(EditAnywhere, Instanced, BlueprintReadWrite)
TArray<UMorpheme*> itemEffects;
And also add the EditInlineNew specifier to the UCLASS(…) declaration for your UMorpheme class. Then in the editor you’ll be able to select a UMorpheme-derived class from the dropdown, and then edit its properties in place.
Be careful with this though. Because this is instancing the objects, you may end up with unintended results. If your outer class/blueprint (the one which has the TArray property in it) is itself going to be instantiated multiple times, then each object will have its own array, and each element will contain its own instance of UMorpheme. More often than not, this will be what you want, but if the UMorpheme is just a specification and its values won’t change at runtime, then you end up with unnecessary duplication of objects. In that case I’d go with the blueprinting method instead.