Components Don't appear in Game or Editor

I created an Actor that will be used as any kind of pick up in game.
Im simply trying to get a visual representation of the Item to show, however it is not appearing in game, or editor.

This is how my components are set up. I looked at the Shooter examples and they are the same however all i get is this in editor. Even though I set the skeletal mesh to use.

ASoulInventoryPickUp::ASoulInventoryPickUp(const class FPostConstructInitializeProperties& PCIP)
	: Super(PCIP)
{
	
	//Set the mesh that is set in BP
	if (DisplaySKMesh != NULL)
	{
       //create new object
       TSubobjectPtr CollisionComp = PCIP.CreateDefaultSubobject(this, TEXT("CollisionComp"));
	   CollisionComp->InitCapsuleSize(40.0f, 50.0f);
	   CollisionComp->BodyInstance.SetMovementChannel(ECC_OverlapAll);
	   CollisionComp->BodyInstance.SetCollisionEnabled(ECollisionEnabled::QueryOnly);
	   CollisionComp->BodyInstance.SetResponseToAllChannels(ECR_Ignore);
	   CollisionComp->BodyInstance.SetResponseToChannel(ECC_PawnMovement, ECR_Overlap);
	   Components.Add(CollisionComp);
		
	   DisplayComponent = PCIP.CreateDefaultSubobject < USkeletalMeshComponent > (this, TEXT("DisplayComponent"));
       Components.Add(DisplayComponent);

       DisplayComponent->SetSkeletalMesh(DisplaySKMesh);

       DisplayComponent->AttachParent = CollisionComp;
       DisplayComponent->bOwnerNoSee = false;
       DisplayComponent->bCastDynamicShadow = true;
       DisplayComponent->PrimaryComponentTick.TickGroup = TG_PrePhysics;
       DisplayComponent->SkinnedMeshUpdateFlag = SMU_OnlyTickPoseWhenRendered;
       DisplayComponent->bChartDistanceFactor = true;
       DisplayComponent->bReceivesDecals = false;
       DisplayComponent->CastShadow = true;
       DisplayComponent->BodyInstance.SetMovementChannel(ECC_Dynamic);
       DisplayComponent->BodyInstance.SetCollisionEnabled(ECollisionEnabled::NoCollision);
       RootComponent = DisplayComponent;

    }
}

header file

// Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "SoulInventoryPickUp.generated.h"

/**
 * 
 */
UCLASS()
class ASoulInventoryPickUp : public AActor
{
	GENERATED_UCLASS_BODY()

	UPROPERTY(EditDefaultsOnly, Category=PickupDetails)
	USkeletalMesh* DisplaySKMesh;

	UPROPERTY(EditDefaultsOnly, Category=PickupDetails)
	UStaticMesh* DisplaySTMesh;

	TSubobjectPtr DisplayComponent;

	void Tick(float DeltaSeconds) OVERRIDE;
	
};

I managed to get the capsule collision to show but not the Skeletalmesh component.

ASoulInventoryPickUp::ASoulInventoryPickUp(const class FPostConstructInitializeProperties& PCIP)
	: Super(PCIP)
{
       //create new object
       TSubobjectPtr CollisionComp = PCIP.CreateDefaultSubobject(this, TEXT("CollisionComp"));
	   CollisionComp->InitCapsuleSize(40.0f, 50.0f);
	   CollisionComp->BodyInstance.SetMovementChannel(ECC_OverlapAll);
	   CollisionComp->BodyInstance.SetCollisionEnabled(ECollisionEnabled::QueryOnly);
	   CollisionComp->BodyInstance.SetResponseToAllChannels(ECR_Ignore);
	   CollisionComp->BodyInstance.SetResponseToChannel(ECC_PawnMovement, ECR_Overlap);
	   Components.Add(CollisionComp);
	   RootComponent = CollisionComp;

	   DisplayComponent = PCIP.CreateDefaultSubobject < USkeletalMeshComponent > (this, TEXT("DisplayComponent"));
       
       DisplayComponent->SetSkeletalMesh(DisplaySKMesh);

       DisplayComponent->bOwnerNoSee = false;
       DisplayComponent->bCastDynamicShadow = true;
       DisplayComponent->PrimaryComponentTick.TickGroup = TG_PrePhysics;
       DisplayComponent->SkinnedMeshUpdateFlag = SMU_OnlyTickPoseWhenRendered;
       DisplayComponent->bChartDistanceFactor = true;
       DisplayComponent->bReceivesDecals = false;
       DisplayComponent->CastShadow = true;
       DisplayComponent->BodyInstance.SetMovementChannel(ECC_Dynamic);
       DisplayComponent->BodyInstance.SetCollisionEnabled(ECollisionEnabled::NoCollision);
	   DisplayComponent->AttachParent = RootComponent;
	   Components.Add(DisplayComponent);
}

I think the problem is that you expose a USkeletalMesh property, but just changing that after the actor has been constructed will not cause it to be assigned to the component. You may want to just expose the whole component instead, to let a user edit it, or implement a PostEditChange function that applies the modified member variable (DisplaySKMesh) to the component.

That’s what i needed to do, I wanted to use PostEditChange. I just couldn’t find the name of the function. Thanks again!

I figured it out. However I still cant get the mesh to appear in the editor. Only in game.

ASoulInventoryPickUp::ASoulInventoryPickUp(const class FPostConstructInitializeProperties& PCIP)
	: Super(PCIP)
{
       //create new object
       TSubobjectPtr CollisionComp = PCIP.CreateDefaultSubobject(this, TEXT("CollisionComp"));
	   CollisionComp->InitCapsuleSize(80.0f, 50.0f);
	   CollisionComp->BodyInstance.SetMovementChannel(ECC_OverlapAll);
	   CollisionComp->BodyInstance.SetCollisionEnabled(ECollisionEnabled::QueryOnly);
	   CollisionComp->BodyInstance.SetResponseToAllChannels(ECR_Ignore);
	   CollisionComp->BodyInstance.SetResponseToChannel(ECC_PawnMovement, ECR_Overlap);
	   Components.Add(CollisionComp);
	   RootComponent = CollisionComp;

	   DisplayComponent = PCIP.CreateDefaultSubobject < USkeletalMeshComponent > (this, TEXT("DisplayComponent"));
       //TSubobjectPtr DisplayComponent = PCIP.CreateDefaultSubobject(this, TEXT("DisplayComponent"));
       DisplayComponent->SetSkeletalMesh(DisplaySKMesh);
       DisplayComponent->bOwnerNoSee = false;
       DisplayComponent->bCastDynamicShadow = true;
       DisplayComponent->PrimaryComponentTick.TickGroup = TG_PrePhysics;
       DisplayComponent->SkinnedMeshUpdateFlag = SMU_OnlyTickPoseWhenRendered;
       DisplayComponent->bChartDistanceFactor = true;
       DisplayComponent->bReceivesDecals = false;
       DisplayComponent->CastShadow = true;
       DisplayComponent->BodyInstance.SetMovementChannel(ECC_Dynamic);
       DisplayComponent->BodyInstance.SetCollisionEnabled(ECollisionEnabled::NoCollision);
	   DisplayComponent->AttachParent = RootComponent;
	   DisplayComponent->SetRelativeScale3D(FVector(0.55,0.55,0.55));
	   Components.Add(DisplayComponent);

	   PrimaryActorTick.bCanEverTick = true;
	   PrimaryActorTick.TickGroup = TG_PrePhysics;
	   RemoteRole = ROLE_SimulatedProxy;
	   bReplicateInstigator = true;
	   bNetUseOwnerRelevancy = true;
}

//Not sure waht to do with this
void ASoulInventoryPickUp::Tick(float DeltaSeconds)
{
	Super::Tick(DeltaSeconds);
}

void ASoulInventoryPickUp::PostInitializeComponents()
{
	Super::PostInitializeComponents();

	DisplayComponent->SetSkeletalMesh(DisplaySKMesh);
}

//Picked up event
void ASoulInventoryPickUp::ReceiveActorBeginOverlap(class AActor* Other)
{
	Super::ReceiveActorBeginOverlap(Other);
	PickupOnTouch(Cast(Other));
}

void ASoulInventoryPickUp::PickupOnTouch(class ASoulHunterCharacter* Character)
{
	this->Destroy();
}