Networking Question: Spawning selectively / on only one client.

Hello everyone,

I am currently learning networking in Unity for a university project and I slowly feel like I am getting a good grasp of the basics.

I am implementing a turn based digital Trading Card Game. My idea was to handle the decks server side until a player actually needs to see the cards. Now instead of spawning the cards for all players and hiding them for the opponents when they are drawn I want to implement it like this (for anti-cheating and whatever reasons, imo this makes more sense):

[Server]
void OnCardDraw() {
    card.MoveToHand();
    NetworkServer.Spawn(card) //FOR OWNER OF CARD ONLY
}

[Server]
void OnCardPlay() {
    card.MoveToField();
    NetworkServer.Spawn(card) //FOR OTHER PLAYER
}

So now my question is: Is this possible? If yes, how? If not, how would you handle this so the other client gets the smallest possible amount of information about the card. For now I don’t care if the opponent can see my hand with the backs of my cards.

I’m really hitting a wall here

Thanks a lot in advance! I really appreciate it!

here are the basics :

[Command] // called from a client, executed on Server

[ClientRpc] // Called from server, executed on clients

bool isLocalPlayer // is it the local player ?

so when playing a card, here what it should look like :

public class player : NetworkBahaviour
{
 void Update()
 {
  if (!isLocalPlayer)
    return ;
   // you are on the local player
   // handle input
   play(); // place conditions of course
 }

 void play()
 {
  Cmd_play_a_card(card_id);
 }

 [Command]
 private void Cmd_play_a_card(int id)
 {
   // this is executed on the server version of this player instance
  Rpc_move_card(id)
 }
 
 [ClientRpc]
 private void Rpc_move_card(int id)
 {
   if (isLocalPlayer)
      moveToHand(id);
   else
       moveToField(id);
 }
}