This was already working before… I moved some of the code into a UObject
that lives on the ActorComponent
and now it’s no longer working. A lot of code is omitted, but hopefully you get the gist.
I have an actor component UExperienceComponent
that lives on my controller. It has a client function.
UFUNCTION(Client, Reliable)
void ClientExperienceGained(FExperienceChange Grant);
void UExperienceComponent::ClientExperienceGained_Implementation(FExperienceChange Grant)
{
OnExperienceChanged.Broadcast(Grant);
}
I’m setting up this callback on the constructor for the ActorComponent
:
UExperienceComponent::UExperienceComponent()
{
SetIsReplicatedByDefault(true);
Container = CreateDefaultSubobject<UExperienceContainer>("SkillPoints");
if (Container)
{
Container->SetExperienceMultiple(ExperienceMultiple);
Container->OnExperienceChanged.AddUObject(this, &ThisClass::HandleExperienceChanged);
}
}
void UExperienceComponent::HandleExperienceChanged(FExperienceChange ExperienceChange)
{
ClientExperienceGained(ExperienceChange);
}
UExperienceContainer
is not replicated; it’s just a UObject
that lives on the server.
Basically, I want this client function to be called the on local controller. However, when I call this function it only occurs on the server. Why is this happening?