From 3d9c91431ee425ff82ab1840f525e3374c2f1eb0 Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Mon, 23 Mar 2026 15:36:12 +0100 Subject: [PATCH 1/4] Remove if check on internal CreateAndSpawnPlayer --- .../Connection/NetworkConnectionManager.cs | 19 ++++++++----------- .../Messages/ConnectionApprovedMessage.cs | 2 +- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs b/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs index 058fb6a38b..082f5e5db8 100644 --- a/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs @@ -1113,17 +1113,14 @@ private void SendConnectionApprovedMessage(ulong approvedClientId) /// internal void CreateAndSpawnPlayer(ulong ownerId) { - if (NetworkManager.DistributedAuthorityMode && NetworkManager.AutoSpawnPlayerPrefabClientSide) - { - var playerPrefab = NetworkManager.FetchLocalPlayerPrefabToSpawn(); - if (playerPrefab != null) - { - var globalObjectIdHash = playerPrefab.GetComponent().GlobalObjectIdHash; - var networkObject = NetworkManager.SpawnManager.GetNetworkObjectToSpawn(globalObjectIdHash, ownerId, playerPrefab.transform.position, playerPrefab.transform.rotation); - networkObject.IsSceneObject = false; - networkObject.NetworkManagerOwner = NetworkManager; - networkObject.SpawnAsPlayerObject(ownerId, networkObject.DestroyWithScene); - } + var playerPrefab = NetworkManager.FetchLocalPlayerPrefabToSpawn(); + if (playerPrefab != null) + { + var globalObjectIdHash = playerPrefab.GetComponent().GlobalObjectIdHash; + var networkObject = NetworkManager.SpawnManager.GetNetworkObjectToSpawn(globalObjectIdHash, ownerId, playerPrefab.transform.position, playerPrefab.transform.rotation); + networkObject.IsSceneObject = false; + networkObject.NetworkManagerOwner = NetworkManager; + networkObject.SpawnAsPlayerObject(ownerId, networkObject.DestroyWithScene); } } diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs index ab6a0ea042..17669a335f 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ConnectionApprovedMessage.cs @@ -347,7 +347,7 @@ public void Handle(ref NetworkContext context) NetworkObject.Deserialize(serializedObject, m_ReceivedSceneObjectData, networkManager); } - if (networkManager.AutoSpawnPlayerPrefabClientSide) + if (networkManager.DistributedAuthorityMode && networkManager.AutoSpawnPlayerPrefabClientSide) { networkManager.ConnectionManager.CreateAndSpawnPlayer(OwnerClientId); } From 3198170fbeb3bf027d8b6a54c1fc2ccdfa832983 Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Thu, 26 Mar 2026 17:00:37 +0100 Subject: [PATCH 2/4] Early return + logging --- .../Connection/NetworkConnectionManager.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs b/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs index 082f5e5db8..77050e4725 100644 --- a/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs @@ -1114,14 +1114,19 @@ private void SendConnectionApprovedMessage(ulong approvedClientId) internal void CreateAndSpawnPlayer(ulong ownerId) { var playerPrefab = NetworkManager.FetchLocalPlayerPrefabToSpawn(); - if (playerPrefab != null) + if (playerPrefab == null) { - var globalObjectIdHash = playerPrefab.GetComponent().GlobalObjectIdHash; - var networkObject = NetworkManager.SpawnManager.GetNetworkObjectToSpawn(globalObjectIdHash, ownerId, playerPrefab.transform.position, playerPrefab.transform.rotation); - networkObject.IsSceneObject = false; - networkObject.NetworkManagerOwner = NetworkManager; - networkObject.SpawnAsPlayerObject(ownerId, networkObject.DestroyWithScene); + if (NetworkManager.LogLevel == LogLevel.Developer) + { + NetworkLog.LogError("Could not fetch a local player to spawn. Ensure PlayerPrefab is set in NetcodeConfig."); + } + return; } + var globalObjectIdHash = playerPrefab.GetComponent().GlobalObjectIdHash; + var networkObject = NetworkManager.SpawnManager.GetNetworkObjectToSpawn(globalObjectIdHash, ownerId, playerPrefab.transform.position, playerPrefab.transform.rotation); + networkObject.IsSceneObject = false; + networkObject.NetworkManagerOwner = NetworkManager; + networkObject.SpawnAsPlayerObject(ownerId, networkObject.DestroyWithScene); } /// From d030d9da062c2302fc55f187b2c993e78aa6683f Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Mon, 30 Mar 2026 20:44:51 +0200 Subject: [PATCH 3/4] Log level update --- .../Runtime/Connection/NetworkConnectionManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs b/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs index 77050e4725..6ae4356ee7 100644 --- a/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs @@ -1118,7 +1118,7 @@ internal void CreateAndSpawnPlayer(ulong ownerId) { if (NetworkManager.LogLevel == LogLevel.Developer) { - NetworkLog.LogError("Could not fetch a local player to spawn. Ensure PlayerPrefab is set in NetcodeConfig."); + NetworkLog.LogWarning("Could not fetch a local player to spawn. Ensure PlayerPrefab is set in NetcodeConfig."); } return; } From 6a4ee8247b64e86e7bf1045f9f65b16ec8e4c552 Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Mon, 30 Mar 2026 20:46:44 +0200 Subject: [PATCH 4/4] Update log level --- .../Runtime/Connection/NetworkConnectionManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs b/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs index 6ae4356ee7..fbfb780028 100644 --- a/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Connection/NetworkConnectionManager.cs @@ -1116,7 +1116,7 @@ internal void CreateAndSpawnPlayer(ulong ownerId) var playerPrefab = NetworkManager.FetchLocalPlayerPrefabToSpawn(); if (playerPrefab == null) { - if (NetworkManager.LogLevel == LogLevel.Developer) + if (NetworkManager.LogLevel <= LogLevel.Developer) { NetworkLog.LogWarning("Could not fetch a local player to spawn. Ensure PlayerPrefab is set in NetcodeConfig."); }