From 2e4f489d891bbdd1dcc6a4ea3d2d4290ddfab82d Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Fri, 30 Jan 2026 12:40:01 +0100 Subject: [PATCH 1/5] chore: started replacing exceptions --- .../Runtime/Core/NetworkObject.cs | 110 ++++++++++++++---- 1 file changed, 87 insertions(+), 23 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs index fe8cea525e..b6f1730b90 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs @@ -1458,7 +1458,10 @@ internal NetworkSceneHandle GetSceneOriginHandle() { if (SceneOriginHandle.IsEmpty() && IsSpawned && IsSceneObject != false) { - throw new Exception($"{nameof(GetSceneOriginHandle)} called when {nameof(SceneOriginHandle)} is still zero but the {nameof(NetworkObject)} is already spawned!"); + if (NetworkManager.LogLevel <= LogLevel.Error) + { + NetworkLog.LogErrorServer($"{nameof(GetSceneOriginHandle)} called when {nameof(SceneOriginHandle)} is still zero but the {nameof(NetworkObject)} is already spawned!"); + } } return !SceneOriginHandle.IsEmpty() ? SceneOriginHandle : gameObject.scene.handle; } @@ -1481,31 +1484,47 @@ public void NetworkShow(ulong clientId) { if (!IsSpawned) { - throw new SpawnStateException("Object is not spawned"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + { + NetworkLog.LogWarning($"Trying to show {name} but is not spawned!"); + } } if (!HasAuthority) { if (NetworkManagerOwner.DistributedAuthorityMode) { - throw new NotServerException($"Only the owner-authority can change visibility when distributed authority mode is enabled!"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + { + NetworkLog.LogWarning($"Only the owner-authority of {name} can change it's visibility when distributed authority mode is enabled!"); + } } else { - throw new NotServerException("Only the authority can change visibility"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + { + NetworkLog.LogWarning($"Only the authority of {name} can change it's visibility!"); + } } } + //CHECK this logic if (Observers.Contains(clientId)) { if (NetworkManagerOwner.DistributedAuthorityMode) { - Debug.LogError($"The object {name} is already visible to Client-{clientId}!"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + { + NetworkLog.LogError($"The object {name} is already visible to Client-{clientId}!"); + } return; } else { - throw new NotServerException("Only server can change visibility"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + { + NetworkLog.LogWarning($"Only the server of {name} can change it's visibility!"); + } } } @@ -1568,18 +1587,27 @@ public void NetworkHide(ulong clientId) { if (!IsSpawned) { - throw new SpawnStateException("Object is not spawned"); + if (NetworkManager.LogLevel <= LogLevel.Error) + { + NetworkLog.LogErrorServer($"[{name}][Attempted NetworkHide while {nameof(NetworkObject)} is not spawned!]"); + } } if (!HasAuthority && !NetworkManagerOwner.DAHost) { if (NetworkManagerOwner.DistributedAuthorityMode) { - throw new NotServerException($"Only the owner-authority can change visibility when distributed authority mode is enabled!"); + if (NetworkManager.LogLevel <= LogLevel.Error) + { + NetworkLog.LogErrorServer($"[{name}][Only the owner-authority can change visibility when distributed authority mode is enabled!]"); + } } else { - throw new NotServerException("Only the authority can change visibility"); + if (NetworkManager.LogLevel <= LogLevel.Error) + { + NetworkLog.LogErrorServer($"[{name}][Only the authority can change visibility!]"); + } } } @@ -1589,9 +1617,9 @@ public void NetworkHide(ulong clientId) { if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) { - Debug.LogWarning($"{name} is already hidden from Client-{clientId}! (ignoring)"); - return; + NetworkLog.LogWarning($"[{name}][{nameof(NetworkObject)} already hidden from Client-{clientId}! (ignoring)]"); } + return; } Observers.Remove(clientId); @@ -1724,18 +1752,27 @@ internal void SpawnInternal(bool destroyWithScene, ulong ownerClientId, bool pla if (!NetworkManagerOwner.IsListening) { - throw new NotListeningException($"{nameof(NetworkManagerOwner)} is not listening, start a server or host before spawning objects"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogErrorServer($"[{name}][{nameof(NetworkManagerOwner)} is not listening, start a server or host before spawning objects]"); + } } if ((!NetworkManagerOwner.IsServer && !NetworkManagerOwner.DistributedAuthorityMode) || (NetworkManagerOwner.DistributedAuthorityMode && !NetworkManagerOwner.LocalClient.IsSessionOwner && NetworkManagerOwner.LocalClientId != ownerClientId)) { if (NetworkManagerOwner.DistributedAuthorityMode) { - throw new NotServerException($"When distributed authority mode is enabled, you can only spawn NetworkObjects that belong to the local instance! Local instance id {NetworkManagerOwner.LocalClientId} is not the same as the assigned owner id: {ownerClientId}!"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogError($"[{name}][When distributed authority mode is enabled, you can only spawn NetworkObjects that belong to the local instance! Local instance id {NetworkManagerOwner.LocalClientId} is not the same as the assigned owner id: {ownerClientId}!]"); + } } else { - throw new NotServerException($"Only server can spawn {nameof(NetworkObject)}s"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogError($"[{name}][Only server can spawn {nameof(NetworkObject)}s]"); + } } } @@ -2256,7 +2293,10 @@ private void OnTransformParentChanged() return; } transform.parent = m_CachedParent; - Debug.LogException(new NotListeningException($"[{name}] {nameof(networkManager)} is not listening, start a server or host before re-parenting")); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogError($"[{name}] {nameof(networkManager)} is not listening, start a server or host before re-parenting"); + } return; } @@ -2273,7 +2313,10 @@ private void OnTransformParentChanged() else { transform.parent = m_CachedParent; - Debug.LogException(new SpawnStateException($"[{name}] {nameof(NetworkObject)} can only be re-parented after being spawned")); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogError($"[{name}] {nameof(NetworkObject)} can only be re-parented after being spawned!"); + } } return; } @@ -2289,11 +2332,17 @@ private void OnTransformParentChanged() { if (networkManager.DistributedAuthorityMode) { - NetworkLog.LogError($"[{name}][Not Owner] Only the owner-authority of child {gameObject.name}'s {nameof(NetworkObject)} component can re-parent it!"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogError($"[{name}][Not Owner] Only the owner-authority of child {gameObject.name}'s {nameof(NetworkObject)} component can re-parent it!"); + } } else { - Debug.LogException(new NotServerException($"[{name}] Only the server can re-parent {nameof(NetworkObject)}s")); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogError($"[{name}] Only the server can re-parent {nameof(NetworkObject)}s"); + } } } return; @@ -2307,14 +2356,20 @@ private void OnTransformParentChanged() { transform.parent = m_CachedParent; AuthorityAppliedParenting = false; - Debug.LogException(new InvalidParentException($"[{name}] Invalid parenting, {nameof(NetworkObject)} moved under a non-{nameof(NetworkObject)} parent")); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogError($"[{name}] Invalid parenting, {nameof(NetworkObject)} moved under a non-{nameof(NetworkObject)} parent"); + } return; } else if (!parentObject.IsSpawned) { transform.parent = m_CachedParent; AuthorityAppliedParenting = false; - Debug.LogException(new SpawnStateException($"[{name}] {nameof(NetworkObject)} can only be re-parented under another spawned {nameof(NetworkObject)}")); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogError($"[{name}] {nameof(NetworkObject)} can only be re-parented under another spawned {nameof(NetworkObject)}"); + } return; } @@ -2531,12 +2586,15 @@ internal void InvokeBehaviourNetworkSpawn() // This assures all NetworkVariables and RPC related tables have been initialized // prior to invoking OnNetworkSpawn so cross NetworkBehaviour: // - accessing of NetworkVariables will work correctly. - // - invocation of RPCs will work properly (and not throw exception under certain scenarios) + // - invocation of RPCs will work properly (and not throw exception under certain scenarios) CHECK this comment about exceptions foreach (var childBehaviour in ChildNetworkBehaviours) { if (!childBehaviour.gameObject.activeInHierarchy) { - Debug.LogWarning($"{GenerateDisabledNetworkBehaviourWarning(childBehaviour)}"); + if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogWarning($"{GenerateDisabledNetworkBehaviourWarning(childBehaviour)}"); + } continue; } childBehaviour.InternalOnNetworkSpawn(); @@ -2992,6 +3050,7 @@ public void Serialize(FastBufferWriter writer) if (!writer.TryBeginWrite(writeSize)) { + //CHECK should we remove this exception? throw new OverflowException("Could not serialize SceneObject: Out of buffer space."); } @@ -3079,6 +3138,7 @@ public void Deserialize(FastBufferReader reader) // Try to begin reading the remaining bytes if (!reader.TryBeginRead(readSize)) { + //CHECK should we remove this exception too? throw new OverflowException("Could not deserialize SceneObject: Reading past the end of the buffer"); } @@ -3280,6 +3340,7 @@ internal static NetworkObject Deserialize(in SerializedObject serializedObject, } catch (Exception ex) { + //CHECK exception too Debug.LogException(ex); } @@ -3327,7 +3388,10 @@ internal static NetworkObject Deserialize(in SerializedObject serializedObject, // Spawn the NetworkObject if (networkObject.IsSpawned) { - throw new SpawnStateException($"[{networkObject.name}] Object-{networkObject.NetworkObjectId} is already spawned!"); + if (NetworkManager.Singleton.LogLevel <= LogLevel.Developer) + { + NetworkLog.LogErrorServer($"[{networkObject.name}] Object-{networkObject.NetworkObjectId} is already spawned!"); + } } // Invoke the non-authority local spawn method From 78b50c729baa1cd3fefb956ecfd68b18c4626f5c Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Fri, 30 Jan 2026 20:59:13 +0100 Subject: [PATCH 2/5] chore: use correct log level and type --- .../Runtime/Core/NetworkObject.cs | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs index b6f1730b90..a60f4d4398 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs @@ -1473,6 +1473,7 @@ internal NetworkSceneHandle GetSceneOriginHandle() /// Usage: Use to start sending updates for a previously hidden to the targeted client.
///
/// Dynamically Spawned: s will be instantiated and spawned on the targeted client side.
+ /// CHECK comment, is a despawned object spawned on the client side? I thought it wasn't /// In-Scene Placed: The instantiated but despawned s will be spawned on the targeted client side.
///
/// See Also:
@@ -1484,9 +1485,9 @@ public void NetworkShow(ulong clientId) { if (!IsSpawned) { - if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogWarning($"Trying to show {name} but is not spawned!"); + NetworkLog.LogErrorServer($"Trying to show {name} but it is not spawned!"); } } @@ -1494,16 +1495,16 @@ public void NetworkShow(ulong clientId) { if (NetworkManagerOwner.DistributedAuthorityMode) { - if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogWarning($"Only the owner-authority of {name} can change it's visibility when distributed authority mode is enabled!"); + NetworkLog.LogError($"[{name}] Only the owner-authority can change visibility when distributed authority mode is enabled!"); } } else { - if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogWarning($"Only the authority of {name} can change it's visibility!"); + NetworkLog.LogError($"[{name}] Only the authority can change visibility!"); } } } @@ -1513,17 +1514,18 @@ public void NetworkShow(ulong clientId) { if (NetworkManagerOwner.DistributedAuthorityMode) { - if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"The object {name} is already visible to Client-{clientId}!"); + NetworkLog.LogErrorServer($"The object {name} is already visible to Client-{clientId}!"); } return; } else { - if (NetworkManagerOwner.LogLevel <= LogLevel.Normal) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogWarning($"Only the server of {name} can change it's visibility!"); + NetworkLog.LogError($"[{name}] Only the server can change visibility!"); + return; } } } @@ -1589,7 +1591,7 @@ public void NetworkHide(ulong clientId) { if (NetworkManager.LogLevel <= LogLevel.Error) { - NetworkLog.LogErrorServer($"[{name}][Attempted NetworkHide while {nameof(NetworkObject)} is not spawned!]"); + NetworkLog.LogErrorServer($"[{name}] Attempted NetworkHide while {nameof(NetworkObject)} is not spawned!"); } } @@ -1599,14 +1601,14 @@ public void NetworkHide(ulong clientId) { if (NetworkManager.LogLevel <= LogLevel.Error) { - NetworkLog.LogErrorServer($"[{name}][Only the owner-authority can change visibility when distributed authority mode is enabled!]"); + NetworkLog.LogError($"[{name}] Only the owner-authority can change visibility when distributed authority mode is enabled!"); } } else { if (NetworkManager.LogLevel <= LogLevel.Error) { - NetworkLog.LogErrorServer($"[{name}][Only the authority can change visibility!]"); + NetworkLog.LogError($"[{name}] Only the authority can change visibility!"); } } } @@ -1617,7 +1619,7 @@ public void NetworkHide(ulong clientId) { if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) { - NetworkLog.LogWarning($"[{name}][{nameof(NetworkObject)} already hidden from Client-{clientId}! (ignoring)]"); + NetworkLog.LogWarning($"[{name}] {nameof(NetworkObject)} already hidden from Client-{clientId}! (ignoring)"); } return; } @@ -1752,9 +1754,9 @@ internal void SpawnInternal(bool destroyWithScene, ulong ownerClientId, bool pla if (!NetworkManagerOwner.IsListening) { - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogErrorServer($"[{name}][{nameof(NetworkManagerOwner)} is not listening, start a server or host before spawning objects]"); + NetworkLog.LogError($"[{name}] {nameof(NetworkManagerOwner)} is not listening, start a server or host before spawning objects."); } } @@ -1762,16 +1764,16 @@ internal void SpawnInternal(bool destroyWithScene, ulong ownerClientId, bool pla { if (NetworkManagerOwner.DistributedAuthorityMode) { - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}][When distributed authority mode is enabled, you can only spawn NetworkObjects that belong to the local instance! Local instance id {NetworkManagerOwner.LocalClientId} is not the same as the assigned owner id: {ownerClientId}!]"); + NetworkLog.LogError($"[{name}] When distributed authority mode is enabled, you can only spawn NetworkObjects that belong to the local instance! Local instance id {NetworkManagerOwner.LocalClientId} is not the same as the assigned owner id: {ownerClientId}!"); } } else { - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}][Only server can spawn {nameof(NetworkObject)}s]"); + NetworkLog.LogError($"[{name}] Only server can spawn {nameof(NetworkObject)}s."); } } } @@ -2293,9 +2295,9 @@ private void OnTransformParentChanged() return; } transform.parent = m_CachedParent; - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}] {nameof(networkManager)} is not listening, start a server or host before re-parenting"); + NetworkLog.LogError($"[{name}] {nameof(networkManager)} is not listening, start a server or host before re-parenting."); } return; } @@ -2313,9 +2315,9 @@ private void OnTransformParentChanged() else { transform.parent = m_CachedParent; - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}] {nameof(NetworkObject)} can only be re-parented after being spawned!"); + NetworkLog.LogErrorServer($"[{name}] {nameof(NetworkObject)} can only be re-parented after being spawned!"); } } return; @@ -2332,16 +2334,16 @@ private void OnTransformParentChanged() { if (networkManager.DistributedAuthorityMode) { - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { NetworkLog.LogError($"[{name}][Not Owner] Only the owner-authority of child {gameObject.name}'s {nameof(NetworkObject)} component can re-parent it!"); } } else { - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}] Only the server can re-parent {nameof(NetworkObject)}s"); + NetworkLog.LogError($"[{name}] Only the server can re-parent {nameof(NetworkObject)}s."); } } } @@ -2356,9 +2358,9 @@ private void OnTransformParentChanged() { transform.parent = m_CachedParent; AuthorityAppliedParenting = false; - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}] Invalid parenting, {nameof(NetworkObject)} moved under a non-{nameof(NetworkObject)} parent"); + NetworkLog.LogErrorServer($"[{name}] Invalid parenting, {nameof(NetworkObject)} moved under a non-{nameof(NetworkObject)} parent"); } return; } @@ -2366,9 +2368,9 @@ private void OnTransformParentChanged() { transform.parent = m_CachedParent; AuthorityAppliedParenting = false; - if (NetworkManagerOwner.LogLevel <= LogLevel.Developer) + if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}] {nameof(NetworkObject)} can only be re-parented under another spawned {nameof(NetworkObject)}"); + NetworkLog.LogErrorServer($"[{name}] {nameof(NetworkObject)} can only be re-parented under another spawned {nameof(NetworkObject)}."); } return; } @@ -3388,7 +3390,7 @@ internal static NetworkObject Deserialize(in SerializedObject serializedObject, // Spawn the NetworkObject if (networkObject.IsSpawned) { - if (NetworkManager.Singleton.LogLevel <= LogLevel.Developer) + if (NetworkManager.Singleton.LogLevel <= LogLevel.Error) { NetworkLog.LogErrorServer($"[{networkObject.name}] Object-{networkObject.NetworkObjectId} is already spawned!"); } From 667b22f181b6aaf5f4b901d81f9029db3d8d7565 Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Fri, 30 Jan 2026 21:27:06 +0100 Subject: [PATCH 3/5] styling and cleanup --- .../Runtime/Core/NetworkObject.cs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs index a60f4d4398..d0a4fb8afe 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs @@ -1473,7 +1473,6 @@ internal NetworkSceneHandle GetSceneOriginHandle() /// Usage: Use to start sending updates for a previously hidden to the targeted client.
///
/// Dynamically Spawned: s will be instantiated and spawned on the targeted client side.
- /// CHECK comment, is a despawned object spawned on the client side? I thought it wasn't /// In-Scene Placed: The instantiated but despawned s will be spawned on the targeted client side.
///
/// See Also:
@@ -1487,7 +1486,7 @@ public void NetworkShow(ulong clientId) { if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogErrorServer($"Trying to show {name} but it is not spawned!"); + NetworkLog.LogErrorServer($"[{name}] Attempted NetworkShow while not spawned."); } } @@ -1504,12 +1503,11 @@ public void NetworkShow(ulong clientId) { if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}] Only the authority can change visibility!"); + NetworkLog.LogError($"[{name}] Only the authority can change visibility."); } } } - //CHECK this logic if (Observers.Contains(clientId)) { if (NetworkManagerOwner.DistributedAuthorityMode) @@ -1524,7 +1522,7 @@ public void NetworkShow(ulong clientId) { if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { - NetworkLog.LogError($"[{name}] Only the server can change visibility!"); + NetworkLog.LogError($"[{name}] Only the server can change visibility."); return; } } @@ -1591,7 +1589,7 @@ public void NetworkHide(ulong clientId) { if (NetworkManager.LogLevel <= LogLevel.Error) { - NetworkLog.LogErrorServer($"[{name}] Attempted NetworkHide while {nameof(NetworkObject)} is not spawned!"); + NetworkLog.LogErrorServer($"[{name}] Attempted NetworkHide while {nameof(NetworkObject)} is not spawned."); } } @@ -2588,7 +2586,7 @@ internal void InvokeBehaviourNetworkSpawn() // This assures all NetworkVariables and RPC related tables have been initialized // prior to invoking OnNetworkSpawn so cross NetworkBehaviour: // - accessing of NetworkVariables will work correctly. - // - invocation of RPCs will work properly (and not throw exception under certain scenarios) CHECK this comment about exceptions + // - invocation of RPCs will work properly (and not throw exception under certain scenarios) foreach (var childBehaviour in ChildNetworkBehaviours) { if (!childBehaviour.gameObject.activeInHierarchy) @@ -3052,7 +3050,6 @@ public void Serialize(FastBufferWriter writer) if (!writer.TryBeginWrite(writeSize)) { - //CHECK should we remove this exception? throw new OverflowException("Could not serialize SceneObject: Out of buffer space."); } @@ -3140,7 +3137,6 @@ public void Deserialize(FastBufferReader reader) // Try to begin reading the remaining bytes if (!reader.TryBeginRead(readSize)) { - //CHECK should we remove this exception too? throw new OverflowException("Could not deserialize SceneObject: Reading past the end of the buffer"); } @@ -3342,7 +3338,6 @@ internal static NetworkObject Deserialize(in SerializedObject serializedObject, } catch (Exception ex) { - //CHECK exception too Debug.LogException(ex); } From 9a0b665a6bd2196ff75a1c06a24f8f6addfd879c Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Fri, 30 Jan 2026 23:01:38 +0100 Subject: [PATCH 4/5] NotListeningException marked obsolete + fix test --- .../Runtime/Core/NetworkObject.cs | 34 +++++++++++++------ .../Exceptions/NotListeningException.cs | 1 + .../NetworkObjectParentingTests.cs | 2 +- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs index d0a4fb8afe..c18b32a75e 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs @@ -1488,6 +1488,7 @@ public void NetworkShow(ulong clientId) { NetworkLog.LogErrorServer($"[{name}] Attempted NetworkShow while not spawned."); } + return; } if (!HasAuthority) @@ -1498,6 +1499,7 @@ public void NetworkShow(ulong clientId) { NetworkLog.LogError($"[{name}] Only the owner-authority can change visibility when distributed authority mode is enabled!"); } + return; } else { @@ -1505,6 +1507,7 @@ public void NetworkShow(ulong clientId) { NetworkLog.LogError($"[{name}] Only the authority can change visibility."); } + return; } } @@ -1523,8 +1526,8 @@ public void NetworkShow(ulong clientId) if (NetworkManagerOwner.LogLevel <= LogLevel.Error) { NetworkLog.LogError($"[{name}] Only the server can change visibility."); - return; } + return; } } @@ -1591,6 +1594,7 @@ public void NetworkHide(ulong clientId) { NetworkLog.LogErrorServer($"[{name}] Attempted NetworkHide while {nameof(NetworkObject)} is not spawned."); } + return; } if (!HasAuthority && !NetworkManagerOwner.DAHost) @@ -1601,6 +1605,7 @@ public void NetworkHide(ulong clientId) { NetworkLog.LogError($"[{name}] Only the owner-authority can change visibility when distributed authority mode is enabled!"); } + return; } else { @@ -1608,6 +1613,7 @@ public void NetworkHide(ulong clientId) { NetworkLog.LogError($"[{name}] Only the authority can change visibility!"); } + return; } } @@ -1756,6 +1762,7 @@ internal void SpawnInternal(bool destroyWithScene, ulong ownerClientId, bool pla { NetworkLog.LogError($"[{name}] {nameof(NetworkManagerOwner)} is not listening, start a server or host before spawning objects."); } + return; } if ((!NetworkManagerOwner.IsServer && !NetworkManagerOwner.DistributedAuthorityMode) || (NetworkManagerOwner.DistributedAuthorityMode && !NetworkManagerOwner.LocalClient.IsSessionOwner && NetworkManagerOwner.LocalClientId != ownerClientId)) @@ -1766,6 +1773,7 @@ internal void SpawnInternal(bool destroyWithScene, ulong ownerClientId, bool pla { NetworkLog.LogError($"[{name}] When distributed authority mode is enabled, you can only spawn NetworkObjects that belong to the local instance! Local instance id {NetworkManagerOwner.LocalClientId} is not the same as the assigned owner id: {ownerClientId}!"); } + return; } else { @@ -1773,6 +1781,7 @@ internal void SpawnInternal(bool destroyWithScene, ulong ownerClientId, bool pla { NetworkLog.LogError($"[{name}] Only server can spawn {nameof(NetworkObject)}s."); } + return; } } @@ -2332,17 +2341,11 @@ private void OnTransformParentChanged() { if (networkManager.DistributedAuthorityMode) { - if (NetworkManagerOwner.LogLevel <= LogLevel.Error) - { - NetworkLog.LogError($"[{name}][Not Owner] Only the owner-authority of child {gameObject.name}'s {nameof(NetworkObject)} component can re-parent it!"); - } + NetworkLog.LogError($"[{name}][Not Owner] Only the owner-authority of child {gameObject.name}'s {nameof(NetworkObject)} component can re-parent it!"); } else { - if (NetworkManagerOwner.LogLevel <= LogLevel.Error) - { - NetworkLog.LogError($"[{name}] Only the server can re-parent {nameof(NetworkObject)}s."); - } + NetworkLog.LogError($"[{name}] Only the server can re-parent {nameof(NetworkObject)}s."); } } return; @@ -3050,7 +3053,11 @@ public void Serialize(FastBufferWriter writer) if (!writer.TryBeginWrite(writeSize)) { - throw new OverflowException("Could not serialize SceneObject: Out of buffer space."); + if (NetworkManager.Singleton.LogLevel <= LogLevel.Error) + { + NetworkLog.LogError("Could not serialize SceneObject: Out of buffer space."); + } + return; } if (HasTransform) @@ -3137,7 +3144,11 @@ public void Deserialize(FastBufferReader reader) // Try to begin reading the remaining bytes if (!reader.TryBeginRead(readSize)) { - throw new OverflowException("Could not deserialize SceneObject: Reading past the end of the buffer"); + if (NetworkManager.Singleton.LogLevel <= LogLevel.Error) + { + NetworkLog.LogError("Could not deserialize SceneObject: Reading past the end of the buffer."); + } + return; } if (HasTransform) @@ -3389,6 +3400,7 @@ internal static NetworkObject Deserialize(in SerializedObject serializedObject, { NetworkLog.LogErrorServer($"[{networkObject.name}] Object-{networkObject.NetworkObjectId} is already spawned!"); } + return null; } // Invoke the non-authority local spawn method diff --git a/com.unity.netcode.gameobjects/Runtime/Exceptions/NotListeningException.cs b/com.unity.netcode.gameobjects/Runtime/Exceptions/NotListeningException.cs index f345432cc0..9c2c52e520 100644 --- a/com.unity.netcode.gameobjects/Runtime/Exceptions/NotListeningException.cs +++ b/com.unity.netcode.gameobjects/Runtime/Exceptions/NotListeningException.cs @@ -5,6 +5,7 @@ namespace Unity.Netcode /// /// Exception thrown when the operation require NetworkManager to be listening. /// + [Obsolete("Not used anymore.")] public class NotListeningException : Exception { /// diff --git a/testproject/Assets/Tests/Runtime/ObjectParenting/NetworkObjectParentingTests.cs b/testproject/Assets/Tests/Runtime/ObjectParenting/NetworkObjectParentingTests.cs index a8eda1a829..c080cac7c5 100644 --- a/testproject/Assets/Tests/Runtime/ObjectParenting/NetworkObjectParentingTests.cs +++ b/testproject/Assets/Tests/Runtime/ObjectParenting/NetworkObjectParentingTests.cs @@ -207,7 +207,7 @@ public void SetupSet(Transform rootTransform, int setIndex, NetworkManager netwo Assert.That(m_Pickup_NetObjs[setIndex], Is.Not.Null); Assert.That(m_Pickup_Back_NetObjs[setIndex], Is.Not.Null); - LogAssert.Expect(LogType.Exception, new Regex("start a server or host", RegexOptions.IgnoreCase)); + LogAssert.Expect(LogType.Error, new Regex("start a server or host", RegexOptions.IgnoreCase)); var cachedParent = m_Cube_NetObjs[setIndex].parent; m_Cube_NetObjs[setIndex].parent = m_Pickup_NetObjs[setIndex]; Assert.That(m_Cube_NetObjs[setIndex].parent, Is.EqualTo(cachedParent), $"Transform {m_Cube_NetObjs[setIndex].parent.name} is not equal to transform {cachedParent.name}"); From 90b5dd346a98109726d1123fa3c5dedf9a5c2e24 Mon Sep 17 00:00:00 2001 From: Noellie Velez Date: Fri, 30 Jan 2026 23:12:36 +0100 Subject: [PATCH 5/5] replace SceneObject by NetworkObject in log --- com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs index c18b32a75e..9568778be9 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs @@ -3055,9 +3055,8 @@ public void Serialize(FastBufferWriter writer) { if (NetworkManager.Singleton.LogLevel <= LogLevel.Error) { - NetworkLog.LogError("Could not serialize SceneObject: Out of buffer space."); + NetworkLog.LogError("Could not serialize NetworkObject: Out of buffer space."); } - return; } if (HasTransform) @@ -3146,9 +3145,8 @@ public void Deserialize(FastBufferReader reader) { if (NetworkManager.Singleton.LogLevel <= LogLevel.Error) { - NetworkLog.LogError("Could not deserialize SceneObject: Reading past the end of the buffer."); + NetworkLog.LogError("Could not deserialize NetworkObject: Reading past the end of the buffer."); } - return; } if (HasTransform)