I'm seeing an issue with the program flow of UNET, specifically around OnServerAddPlayer with SyncVars
SyncVars have their values synced when NetworkBehaviour.OnStartClient is called, which is ideal for initialization, whereas any future changes to the SyncVar activate the hook.
OnServerAddPlayer is, as far as I can tell, the earliest possible way the server can receive parameters from the client, and use it to set the values of SyncVars.
The issue is that any changes to SyncVars from OnServerAddPlayer are carried out as SyncVar updates, as opposed to SyncVar initialization.
What this means is that the Server doesn't receive the user's parameters until after the user's NetworkBehaviours have already initialized their SyncVars.
It seems that OnServerAddPlayer should be a crucial part of the initialization, at least on the server side