Hi,
I followed this great tutorial to build a multiplayer application with a specific server and each client being a player:
http://3dgep.com/?p=4609
In a fully authoritative mode, I don’t know how to send specific variables (I mean other than the position/rotation of the transform) to each player. For example, to display the player ID on each player (cube), I’ve been doing the following in a ServerPlayerManager (server-side):
Hashtable players = new Hashtable();
public void spawnPlayer(NetworkPlayer player) {
Debug.Log("Spawning player game object for player " + player);
PlayerInfo ply = GameObject.FindObjectOfType(typeof(PlayerInfo)) as PlayerInfo;
GameObject go = (GameObject)Network.Instantiate(ply.playerPrefab, Vector3.up*3, Quaternion.identity, 0);
players[player] = go;
networkView.RPC("setID", RPCMode.All, player);
}
[RPC]
void setID(NetworkPlayer player) {
GameObject go = (GameObject)players[player];
cubeScript cSript = (cubeScript)go.GetComponent<cubeScript>();
cSript.ID = player.ToString();
}
In my cube/player prefab, I attached a script (observed by a NetworkView) with a public variable ID, which I link to a TextMesh.
Problem:
On the server side, each cube has its own label displayed correctly.
BUT on the client side - it does not work.
It looks like the reason is that the Hashtable “players” is empty on the client side - so the code cannot reach specifically each player displayed to update the correct ID.
Can somebody help on that?
Thanks!