a) the pickup is most likely spawned on the server (as it should), so the owner of the pick up is the server. bShowPickupName in that case will only be replicated to the server
b) your use of in interface wrong and goes against everything that they are used for.
SetShowPickupName should be an interface function and called that way. Casts cause a hard reference to be formed.
if(UKismetSystemLibrary::DoesImplementInterface(OtherActor, UInteractableActorInterface::StaticClass()))
{
// c++ can be skipped if you are not using implementation
if (IInteractableActorInterface* inter = Cast<IInteractableActorInterface>(OtherActor)) {
inter->SetShowPickupName_Implementation(true);
}
// blueprint (need overides implemented from within bp)
if (OtherActor->GetClass()->ImplementsInterface(UInteractableActorInterface::StaticClass()))
{
IInteractableActorInterface::Execute_SetShowPickupName(OtherActor, true);
}
}