I’m sure that I’m doing this completely wrong to begin with, but I’m still trying to wrap my head around why this particular issue occurs. I have noticed that when using Mirror and attempting to add a new player -
GameObject player = Instantiate(playerPrefab, start.position, start.rotation);
NetworkServer.AddPlayerForConnection(conn, player);
if there are any modifications made to the playerPrefab within the network manager, those changes do not apply until after the Start() methods run on components of that playerPrefab. For example, in this particular getup I set player tags based on the current number of active connections, then use that prefab to instantiate the new player. When I check the player tag in one of my base player script components under Start() I receive the default tag assigned to the prefab in the editor. If I continue checking in Update() I catch the new tag after 3 or 4 ticks.
I could understand if this only occurred on client connections, even if it would be somewhat unintuitive, but it happens on the host as well. Obviously, I could throw in a delayed method to catch the correctly updated values, but that feels way too hacky and unpredictable. Likewise, keeping the checks in Update feels like a waste of resources for a check that should only need to occur once.