Hi,
yes, you are not far, but definitly going wrong with the tagging.
all your players are tagged the same, it's only a good way to narrow down the search when "finding" a player.
fire a global event, each player receives it, and only one of them is "active" as in shoudl react this event.
and so typically, since in your game only one actor can be active at a time, keep track of this with a global variable, a gameobject set to the current active player.
when you receive the global event, you compare your own gameobject ( using get owner) with the global variable, if it matches then you proceed, else you bail.
EVEN BETTER, only send event to thet global variable and this is much more efficient.
Nowm if you want to manage who's turn it is, you would maintain a list of your players ( using ArrayMaker, that you can find on the wiki) or simply using the gameobject name as a way to select the next gameobject like so:
player 1
player 2
player 3
player 4
maintain a global int set to 1 by default
compose the name using "build string" action, find that gameobject ( on top of filtering it by tag for efficiency) and then going to the next player is matter of increment this global int ( and set it to 1 when you reach 5).
Does that make sense? lots of different ways to do this.
bye,
Jean