Well if this is multiplayer you never want to use “Get player (x)” where it uses an index. You’ll also want to assign an owner on your spawn actor. If you’re in your Player Controller, use “Get Controlled Pawn” to get the current pawn controlled.
The logic you have written is a little confusing. I would spawn both on begin play and create “hide” functionality like you said in the post above. Make sure your “hide” event is a multicast, and set visibility and collision of your BP to false. Don’t forget to turn off gravity as well (character movement component i believe) or your character will fall through the world. Do this before setting collision to none. Create a “Show” with the opposite functionality, still multicast.
Then create an event “Switch Character”, server . Check which character they are in. Run Show then possess on the one you want to switch to, run hide and unpossess on the other.
Call switch character on your input.
Good luck!