[4.7 Bug] Properties inside struct, can't be edited when object is instanced inline inside ActorComponent

Reproduction:

Create simple USTRUCT():

USTRUCT(BlueprintType)
struct FGAAttributeBase
{
	GENERATED_USTRUCT_BODY()
public:
	UPROPERTY()
		FName AttributeName;
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Value")
		float BaseValue;
}

Now create new UObject Class:

UCLASS(BlueprintType, Blueprintable, DefaultToInstanced, EditInlineNew)
class UARCharacterAttributes : public UObject
{
	GENERATED_BODY()
public:
	UARCharacterAttributes(const FObjectInitializer& ObjectInitializer);
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Resources")
		FGAAttributeBase Health;
}

And Finally new ActorComponent:

UCLASS(hidecategories = (Object, LOD, Lighting, Transform, Sockets, TextureStreaming), editinlinenew, meta = (BlueprintSpawnableComponent))
class UGAAttributeComponent : public UActorComponent
{
	GENERATED_UCLASS_BODY()
public:
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Instanced, Replicated)
		class UARCharacterAttributes* DefaultAttributes;
}

Add this component to your character, using ObjectInitializer.

Launch, project, and try to edit Health property.

I have been using latest 4.7 from github.

Just a quick observation - I haven’t checked this, but doesn’t

UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = “Value”)

float BaseValue;

mark the Basevalue as non-editable?
Marking the overall UProperty struct as editable wouldn’t change all the struct’s members to editable. Seeing as your only visible property (Basevalue) is not editable it would look, in the editor, as though the whole struct wasn’t able to be edited.

No it will just make it ReadOnly in graph.

It works just fine in defaults.

Hi iniside,

Sorry for the delay in responding to this post. I used the code you provided to try to reproduce this issue, but received a LNK2019 compile error in GAAttributeComponent. Would it be possible to see the code in the source file for this class?

Tim

Hi iniside,

We have not heard back from you for a few days. Do you still need help with this issue? I will be marking this issue as resolved for tracking purposes, but please feel free to re-open this post at any time if you need any additional help.

Tim

Hey sorry for late reply, I was on the road, over past few days and wasn’t able to create project which would reproduce the issue. But here is download link:
https://dl.dropboxusercontent.com/u/70400220/Bugs/StructBug.7z
Just open this project, and check character component. You should be able to select one class for the Attributes field.

In that class there will be property Health (under resources category), And as you can see you can’t change properties inside Health struct.

I checked it against latest binary.

Hi iniside,

Thank you for providing the sample project. I was able to see what you were referring to, and used that project as a basis to test this issue in our latest internal build of the Engine. I saw the same results there, and have submitted a report to have this investigated further (UE-12025).

Tim

Hi Tim. Do you have any update on the status of this issue?

Hi Xanen0,

Unfortunately this issue has not yet been resolved. The ticket is still open.

There may be a possible workaround, though. From what I can tell, the properties being uneditable only occurs if the ActorComponent they are instanced within is added to a class via C++. If you are able to add the ActorComponent in the Blueprint Editor, the properties can usually be edited.

Tim

I can confirm the issue is still in version 4.12.3…

Hi undercover,

Thank you for letting us know. I have updated the report of the issue to indicate that it is still occurring in 4.12.

Tim

This is still an issue in 4.20! How has this not been resolved yet…

Would love to know where to look to start fixing this. Happy to do a PR.

This bug is not fixed in 4.22 yet.
@TheJamsh @inside Could you share how did you deal with it?

Looks like epic just ignored it

What’s the status of this issue?
I’ve run into it just now.