The documentation is rather confusing on NetworkVariable as it doesn't really explain how to actually initialize them properly. What is the correct pattern to guarantee that a client will spawn the object and read the correct state of a NetworkVariable during OnNetworkSpawn()? Using Awake() throws warnings, so the docs are probably just outdated there. Using OnNetworkSpawn() throws warnings, so that doesn't seem right. Setting before running Spawn() throws warnings... Setting after running Spawn() throws warnings... Setting them in OnSyncronize() doesn't even set them, since it's used for something else entirely. Erm.. When are we supposed to set the initial values of NetworkVariables... ? The only way I see that doesn't throw or fail is to just create the object on the network and sit on your hands until everyone is ready, then set the value and wait for it to replicate. If you need to do some init with that value then you need to use OnChanged callbacks to trigger something. If that's the case - that seems really bad. This would imply that the initial state is basically guaranteed incorrect, which is some nonsense so I'm assuming I just don't understand it correctly.