On several Connections at the same time, the Server wont Spawn all Clients correctly

It seems like, if you spawn several Clients at the same time, the Server runs into problems.

One for example is on a low tickrate:

I spawned 35 Clients on a tickrate of 8, 30 Clients spawned without problems.
The 5 Clients that spawned at last, couldnt detect the IsLocalPlayer/IsOwner/… booleans.
I run this in update on a Client:

    void Update()
    {
      if(IsLocalPlayer) Debug.Log($" My Client: {NetworkManager.LocalClientId}");
      Debug.Log($"Client: {NetworkManager.LocalClientId}");
    }

And it couldnt detect itself as LocalPlayer while the other 30 could.

I also spawned 35 Clients on a tickrate of 32, all 35 Clients spawned without this problem.

There is also the problem with just 2 Clients spawning at the same time (this problem is also valid in the example above):

One of them will throw this error before the connection is actually finished.

(this error will occur more often if more clients spawn)

with the following Error after it spawned:

While the other is perfectly fine.
I spawned them from a bash script in batchmode. The server and client are also detached with independent Builds. I use a devel server to connect.

I don’t know about the second error, but for the first I find that it’s sometimes an issue of timing, where Update can be called before the object is properly network-initialized (which means that variables such as IsLocalPlayer are not yet set). In such cases, I use a bool wasInitialized (which defaults to false) which I set to true in public override void OnNetworkSpawn(). At the top of Update(), I put if (!wasInitialized) return;, and I set wasInitialized=false; in OnDisable() for pooled objects.

I would agree if the Client wouldnt be Spawned from the Server. OnNetworkSpawn should be called pre Update, since this Method gets called before Start. And I tested two variants to Setup all necessary Information on the Client.

  1. From the server itself with the OnConnectionCallback, where i get the ClientID as identifier
  2. OnNetworkSpawn on the Client itself that Requests Information from the Server.

(The Update was just a test to get a constant result on IsLocalPlayer after the spawn)

On both i got the same problem. And if i do not mistake, what could be the case, the ClientID is transferred pre Spawn.

Did you ever resolve this issue? I have the same problem. I have a matchmaking system which signals the clients to join a server. Having a random delay before connecting works, but is not nice. Still trying to find the correct solution to this.