The details tab displays only a subset of all components of a class. To simplify a bit: native components are only displayed if they are stored in a property with one of the Visible* or Edit* property specifiers. The input component property is introduced in the AActor class without any of these specifiers, so you won’t see it in the details panel unless you assign the component to another variable that has one of these specifiers.
To test this you can create a C++ subclass of ADefaultPawn along the following lines:
Header (without guards, includes, etc.):
UCLASS() class BUILDINGESCAPE_API AExtendedDefaultPawn : public ADefaultPawn
{
GENERATED_BODY()
public:
AExtendedDefaultPawn(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
void BeginPlay() override;
private:
UPROPERTY(VisibleDefaultsOnly)
UGrabber* Grabber;
UPROPERTY(VisibleDefaultsOnly)
UPhysicsHandleComponent* PhysicsHandle;
UPROPERTY(VisibleDefaultsOnly)
UInputComponent* MyInputComponent;
};
Body (similarly):
AExtendedDefaultPawn::AExtendedDefaultPawn(
const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
Grabber = CreateDefaultSubobject<UGrabber>("Grabber");
PhysicsHandle = CreateDefaultSubobject<UPhysicsHandleComponent>("PhysicsHandle");
BaseEyeHeight = 60.f;
}
void AExtendedDefaultPawn::BeginPlay()
{
Super::BeginPlay();
MyInputComponent = FindComponentByClass<UInputComponent>();
USphereComponent* SphereComponent{GetCollisionComponent()};
SphereComponent->SetSimulatePhysics(true);
SphereComponent->SetMassOverrideInKg(NAME_None, 70.f);
SphereComponent->SetGenerateOverlapEvents(true);
SphereComponent->SetNotifyRigidBodyCollision(true);
}
When using this class instead of DefaultPawn_BP, you’ll see that MyInputComponent shows up in the details panel, but this changes as soon as you remove the VisibleDefaultsOnly property specifier for the variable.
In more technical detail (and probably only interesting for the most hard-core nerds among us): How the subset of displayed properties is determined depends on the so-called component-editor mode. The case you’re interested in is EComponentEditorMode::ActorInstance and the code that populates the panel for this mode starts around line 4582 in SSCSEditor.cpp. The important call is ShouldAddInstancedActorComponent() which in turn calls FComponentEditorUtils::CanEditNativeComponent(). If you look in ComponentEditorUtils.cpp you’ll see that this method only returns true if the CPF_EDIT property flag is set, which is typically done by the UPROPERTY() macro.