- Home /
Player Name on Network - UNet - Bug
I'm using this code to sync nickname of players across the network, using UNet, and it finally works (several searches and tries before getting something simple/working) \o/
However I noticed that if one client connects to the server directly after that it started (1~2 sec after), the first player copies the name of the second coming.
Is there someone that could help me to figure out why it behaves that way please?
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
[NetworkSettings (sendInterval=1)]
public class PlayerNameSync : NetworkBehaviour {
[SyncVar] // (hook = "WhenPlayerNameChange")]
public string playerName = "";
private Transform myTransform;
public bool alreadyChanged = false;
public override void OnStartLocalPlayer()
{
TransmitName();
SetName();
}
void Awake()
{
myTransform = transform;
}
void FixedUpdate()
{
if (!alreadyChanged)
{
if (playerName != "")
{
alreadyChanged = true;
myTransform.GetComponentInChildren<TextMesh>().text = playerName;
}
}
}
[Command]
void CmdProvideNameToServer(string name)
{
playerName = name;
}
[Client]
void TransmitName()
{
if (PlayerPrefs.HasKey("nickname"))
CmdProvideNameToServer(PlayerPrefs.GetString("nickname"));
else
CmdProvideNameToServer("None");
}
void SetName()
{
if (!isLocalPlayer)
{
Debug.Log("SetName: " + playerName);
myTransform.GetComponentInChildren<TextMesh>().text = playerName;
}
else
{
if (PlayerPrefs.HasKey("nickname"))
Debug.Log("nickname Registered: " + PlayerPrefs.GetString("nickname"));
else
Debug.Log("nickname not Registered: " + playerName);
myTransform.GetComponentInChildren<TextMesh>().text = PlayerPrefs.GetString("nickname");
}
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612075550im_/https://answers.unity.com/themes/thub/images/avi.jpg)