I’m trying to figure out if there is any BeginPlay() activity on the client during loading, as I feel like there should be.
I have a Training Target class that extends AActor (all in C++). During game start BeginPlay() activates and determines if the mesh is enabled/disabled based on a simple bool bDisabled. This will either enable/disable the mesh’s visibility, the collision, and etc. This Target is then placed inside the level VIA editor, and the bool is set randomly. However, whenever the Client joins, no debug messages are called, and their targets aren’t being disabled.
AROTTrainingTarget::AROTTrainingTarget(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
bDisabled = false;
bInactive = true;
ActivationType = EActivationType::ENUM_Active;
// === Collision ===
// === Components ===
SceneComponent = ObjectInitializer.CreateDefaultSubobject<USceneComponent>(this, TEXT("SceneComp"));
RootComponent = SceneComponent;
Mesh = ObjectInitializer.CreateOptionalDefaultSubobject<UStaticMeshComponent>(this, TEXT("MeshComp"));
Mesh->AttachParent = RootComponent;
Mesh->bGenerateOverlapEvents = true;
Mesh->SetCollisionProfileName("Pawn");
PreviewMesh = ObjectInitializer.CreateOptionalDefaultSubobject<UStaticMeshComponent>(this, TEXT("PreviewMeshComp"));
PreviewMesh->AttachParent = RootComponent;
PreviewMesh->bHiddenInGame = true;
PreviewMesh->SetCollisionProfileName("NoCollision");
PreviewMesh->bGenerateOverlapEvents = false;
//Replication
bReplicates = true;
}
void AROTTrainingTarget::BeginPlay()
{
if (GetNetMode() == ENetMode::NM_Client)
GEngine->AddOnScreenDebugMessage(-1, 15, FColor::Yellow, TEXT("CLIENT!!!!"));
if (HasAuthority())
GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Blue, TEXT("Server"));
else
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Green, TEXT("Client"));
Super::BeginPlay();
//Begin activation
if (bDisabled)
{
DisableTarget();
return;
}
EnableTarget();
}
void AROTTrainingTarget::ToggleEnabled()
{
GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Cyan, TEXT("ToggleEnabled!"));
if (!bDisabled)
EnableTarget();
else
DisableTarget();
}
void AROTTrainingTarget::EnableTarget()
{
UE_LOG(Log, All, TEXT("%s - EnableTarget()"), *GetName());
if (HasAuthority())
{
switch (ActivationType)
{
case EActivationType::ENUM_Blueprint:
PopDown();
break;
case EActivationType::ENUM_Radial:
PopDown();
break;
case EActivationType::ENUM_Active:
Popup();
break;
}
}
Mesh->SetHiddenInGame(false);
bDisabled = false;
Mesh->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
}
void AROTTrainingTarget::DisableTarget()
{
Mesh->SetHiddenInGame(true);
bDisabled = true;
Mesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}