What is the effect of ShowOnlyInnerProperties?

The ShowOnlyInnerProperties metadata specifier is used on a bunch of UPROPERTY declarations throughout the engine code, but it isn’t documented except as “[PropertyMetadata]”. Am I correct that this suppresses the grouping of a struct UPROPERTY’s members into a single node in the property editor, instead distributing them by category throughout the actor’s other properties?

You can check this one here, which is sum up most of the meta for UPROPERTY:

Yes, you are correct. ShowOnlyInnerProperties suppresses the grouping of a struct’s UPROPERTYs members into a single node in the property editor. Instead, the categories assigned to its UPROPERTYs will be used.

ShowOnlyInnerProperties is applied to a UPROPERTY that is a struct:

USTRUCT(BlueprintType)
struct FWeaponInfo
{
	GENERATED_BODY()

public:

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta=(Category="Weapon"))
	bool bIsCool;

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta=(Category="Style"))
	UAnimMontage* Attack;
};


UCLASS()
class UAttackSelector : public UObject
{
	GENERATED_BODY()

public:

	UPROPERTY(EditDefaultsOnly, Category = Weapon, meta=(ShowOnlyInnerProperties))
	FWeaponInfo Weapon;

	// ...
};

(So you don’t use it inside your struct to expand.)

Instances of UAttackSelector will have FWeaponInfo’s bIsCool and Attack member variables displayed as if they were members of UAttackSelector.

I’d guess you can use it on UCLASSes too. Not sure where else it’s useful. Doesn’t seem to work for arrays.

It’s unfortunate that ShowOnlyInnerProperties isn’t mentioned on the official docs and marked as “undocumented” on the wiki.