diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs
index fe8cea525e..9568778be9 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,18 +1484,30 @@ public void NetworkShow(ulong clientId)
{
if (!IsSpawned)
{
- throw new SpawnStateException("Object is not spawned");
+ if (NetworkManagerOwner.LogLevel <= LogLevel.Error)
+ {
+ NetworkLog.LogErrorServer($"[{name}] Attempted NetworkShow while not spawned.");
+ }
+ return;
}
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.Error)
+ {
+ NetworkLog.LogError($"[{name}] Only the owner-authority can change visibility when distributed authority mode is enabled!");
+ }
+ return;
}
else
{
- throw new NotServerException("Only the authority can change visibility");
+ if (NetworkManagerOwner.LogLevel <= LogLevel.Error)
+ {
+ NetworkLog.LogError($"[{name}] Only the authority can change visibility.");
+ }
+ return;
}
}
@@ -1500,12 +1515,19 @@ public void NetworkShow(ulong clientId)
{
if (NetworkManagerOwner.DistributedAuthorityMode)
{
- Debug.LogError($"The object {name} is already visible to Client-{clientId}!");
+ if (NetworkManagerOwner.LogLevel <= LogLevel.Error)
+ {
+ NetworkLog.LogErrorServer($"The object {name} is already visible to Client-{clientId}!");
+ }
return;
}
else
{
- throw new NotServerException("Only server can change visibility");
+ if (NetworkManagerOwner.LogLevel <= LogLevel.Error)
+ {
+ NetworkLog.LogError($"[{name}] Only the server can change visibility.");
+ }
+ return;
}
}
@@ -1568,18 +1590,30 @@ 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.");
+ }
+ return;
}
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.LogError($"[{name}] Only the owner-authority can change visibility when distributed authority mode is enabled!");
+ }
+ return;
}
else
{
- throw new NotServerException("Only the authority can change visibility");
+ if (NetworkManager.LogLevel <= LogLevel.Error)
+ {
+ NetworkLog.LogError($"[{name}] Only the authority can change visibility!");
+ }
+ return;
}
}
@@ -1589,9 +1623,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 +1758,30 @@ 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.Error)
+ {
+ 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))
{
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.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}!");
+ }
+ return;
}
else
{
- throw new NotServerException($"Only server can spawn {nameof(NetworkObject)}s");
+ if (NetworkManagerOwner.LogLevel <= LogLevel.Error)
+ {
+ NetworkLog.LogError($"[{name}] Only server can spawn {nameof(NetworkObject)}s.");
+ }
+ return;
}
}
@@ -2256,7 +2302,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.Error)
+ {
+ NetworkLog.LogError($"[{name}] {nameof(networkManager)} is not listening, start a server or host before re-parenting.");
+ }
return;
}
@@ -2273,7 +2322,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.Error)
+ {
+ NetworkLog.LogErrorServer($"[{name}] {nameof(NetworkObject)} can only be re-parented after being spawned!");
+ }
}
return;
}
@@ -2293,7 +2345,7 @@ private void OnTransformParentChanged()
}
else
{
- Debug.LogException(new NotServerException($"[{name}] Only the server can re-parent {nameof(NetworkObject)}s"));
+ NetworkLog.LogError($"[{name}] Only the server can re-parent {nameof(NetworkObject)}s.");
}
}
return;
@@ -2307,14 +2359,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.Error)
+ {
+ NetworkLog.LogErrorServer($"[{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.Error)
+ {
+ NetworkLog.LogErrorServer($"[{name}] {nameof(NetworkObject)} can only be re-parented under another spawned {nameof(NetworkObject)}.");
+ }
return;
}
@@ -2536,7 +2594,10 @@ internal void InvokeBehaviourNetworkSpawn()
{
if (!childBehaviour.gameObject.activeInHierarchy)
{
- Debug.LogWarning($"{GenerateDisabledNetworkBehaviourWarning(childBehaviour)}");
+ if (NetworkManagerOwner.LogLevel <= LogLevel.Developer)
+ {
+ NetworkLog.LogWarning($"{GenerateDisabledNetworkBehaviourWarning(childBehaviour)}");
+ }
continue;
}
childBehaviour.InternalOnNetworkSpawn();
@@ -2992,7 +3053,10 @@ 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 NetworkObject: Out of buffer space.");
+ }
}
if (HasTransform)
@@ -3079,7 +3143,10 @@ 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 NetworkObject: Reading past the end of the buffer.");
+ }
}
if (HasTransform)
@@ -3327,7 +3394,11 @@ 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.Error)
+ {
+ 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}");