Why mobility attribute hidden in some actors and components?

Probably a lame question, but still I’m wondering why.

I tried to attach my ACableActor instance to a socket on a character and it said:

“Cannot attach static actor X to dynamic actor Y”

But the mobility option in the details panel for this CableActor or the CableComponent inside it is not displayed, so I can’t make it moveable. It inherits AActor. The component inherits a UMeshComponent.

I create an empty actor, add a Cable component to it, and I can’t see the option either, but since the parent actor is moveable, it says it is moveable too and I can attach it to a socket…

What makes this parameter appear? Why it’s not displayed sometimes? How to make it visible?


After a while investigating I found out this:

ACableActor inherits AActor. Actors don’t have a mobility attribute. It’s there because It’s taken from the root component’s transform, so it contains the same setting you use in the root component.

The mobility attribute starts in the USceneComponent type. UCableComponent inherits from it (USceneComponent → UPrimitiveComponent → UMeshComponent → UCableComponent). But in the way, on UPrimitiveComponent class header you can see:

UCLASS(abstract, HideCategories=(Mobility), ShowCategories=(PhysicsVolume))

So the mobility category is hidden from now on.

So I wonder WHY they do this, what’s the purpose of this?
And why would they create a Cable Component that creates a physics rope that can’t be attached to a socket which is a very typical thing to do on a game?

How do people work with this?