Skip to content

Commit e2ad473

Browse files
committed
Small test fixes
1 parent 7077860 commit e2ad473

11 files changed

Lines changed: 66 additions & 50 deletions

File tree

com.unity.netcode.gameobjects/Editor/NetworkManagerHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public bool NotifyUserOfNestedNetworkManager(NetworkManager networkManager, bool
187187
var transform = networkManager.transform;
188188
var isParented = transform.root != transform;
189189

190-
var message = NetworkManager.GenerateNestedNetworkManagerMessage(transform);
190+
var message = $"{transform.name} is nested under {transform.root.name}. NetworkManager cannot be nested.\n";
191191
if (s_LastKnownNetworkManagerParents.ContainsKey(networkManager) && !ignoreNetworkManagerCache)
192192
{
193193
// If we have already notified the user, then don't notify them again

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,11 +1019,6 @@ internal bool NetworkManagerCheckForParent(bool ignoreNetworkManagerCache = fals
10191019
return isParented;
10201020
}
10211021

1022-
internal static string GenerateNestedNetworkManagerMessage(Transform transform)
1023-
{
1024-
return $"{transform.name} is nested under {transform.root.name}. NetworkManager cannot be nested.\n";
1025-
}
1026-
10271022
/// <summary>
10281023
/// Handle runtime detection for parenting the NetworkManager's GameObject under another GameObject
10291024
/// </summary>
@@ -1835,6 +1830,45 @@ internal void OnValidate()
18351830
Log.Warning(new Context(LogLevel.Normal, $"{nameof(NetworkManager)} cannot be a {nameof(NetworkObject)}."));
18361831
}
18371832

1833+
var activeScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();
1834+
1835+
// If the scene is not dirty or the asset database is currently updating then we can skip updating the NetworkPrefab information
1836+
if (!activeScene.isDirty || EditorApplication.isUpdating)
1837+
{
1838+
return;
1839+
}
1840+
1841+
// During OnValidate we will always clear out NetworkPrefabOverrideLinks and rebuild it
1842+
NetworkConfig.Prefabs.NetworkPrefabOverrideLinks.Clear();
1843+
1844+
var prefabs = NetworkConfig.Prefabs.Prefabs;
1845+
// Check network prefabs and assign to dictionary for quick look up
1846+
for (int i = 0; i < prefabs.Count; i++)
1847+
{
1848+
var networkPrefab = prefabs[i];
1849+
var networkPrefabGo = networkPrefab?.Prefab;
1850+
if (networkPrefabGo == null)
1851+
{
1852+
continue;
1853+
}
1854+
1855+
var networkObject = networkPrefabGo.GetComponent<NetworkObject>();
1856+
if (networkObject == null)
1857+
{
1858+
Log.Warning(new Context(LogLevel.Normal, $"Cannot register prefab to {nameof(NetworkManager)}, missing a {nameof(NetworkObject)} component at its root").AddObject(networkPrefab.Prefab));
1859+
continue;
1860+
}
1861+
1862+
{
1863+
var childNetworkObjects = new List<NetworkObject>();
1864+
networkPrefabGo.GetComponentsInChildren(true, childNetworkObjects);
1865+
if (childNetworkObjects.Count > 1) // total count = 1 root NetworkObject + n child NetworkObjects
1866+
{
1867+
Log.Warning(new Context(LogLevel.Normal, $"Prefab has child {nameof(NetworkObject)}(s) but they will not be spawned across the network (unsupported {nameof(NetworkPrefab)} setup)").AddObject(networkPrefab.Prefab));
1868+
}
1869+
}
1870+
}
1871+
18381872
try
18391873
{
18401874
OnValidateComponent();

com.unity.netcode.gameobjects/Runtime/Logging/ContextualLogger.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ private string BuildLog(Context context)
156156

157157
if (m_UseCompatibilityMode)
158158
{
159-
;
160159
m_Builder.Append(context.Message);
161160
}
162161
else

com.unity.netcode.gameobjects/Runtime/Logging/LogContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public Context AddTag(string msg)
6868
return this;
6969
}
7070

71-
public Context ForGameObject(GameObject obj)
71+
public Context AddObject(Object obj)
7272
{
7373
RelevantObjectOverride = obj;
7474
return this;

com.unity.netcode.gameobjects/Runtime/Logging/LogContextNetworkManager.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,18 @@ public readonly void TrySendMessage(LogType logType, string message)
3535
if (m_NetworkManager != null
3636
&& m_NetworkManager.IsListening
3737
&& (m_NetworkManager?.NetworkConfig.EnableNetworkLogs ?? false)
38-
&& (m_NetworkManager.IsServer || m_NetworkManager.LocalClient.IsSessionOwner))
38+
&& !m_NetworkManager.IsServer && !m_NetworkManager.LocalClient.IsSessionOwner)
3939
{
4040
var messageType = NetworkLog.GetMessageLogType(logType);
41-
NetworkLog.SendLogToAuthority(m_NetworkManager, messageType, m_NetworkManager.LocalClientId, message);
41+
42+
var networkMessage = new ServerLogMessage
43+
{
44+
LogType = messageType,
45+
Message = message,
46+
SenderId = m_NetworkManager.LocalClientId
47+
};
48+
var size = m_NetworkManager.ConnectionManager.SendMessage(ref networkMessage, MessageDeliveryType<ServerLogMessage>.DefaultDelivery, NetworkManager.ServerClientId);
49+
m_NetworkManager.NetworkMetrics.TrackServerLogSent(NetworkManager.ServerClientId, (uint)logType, size);
4250
}
4351
}
4452

com.unity.netcode.gameobjects/Runtime/Logging/NetworkLog.cs

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ internal struct LogConfiguration
1616
/// </summary>
1717
public static class NetworkLog
1818
{
19+
internal static LogConfiguration Config;
1920
private static readonly ContextualLogger k_Log = new(true);
2021

2122
internal static void SetNetworkManager(NetworkManager networkManager)
@@ -29,16 +30,14 @@ internal static void SetNetworkManager(NetworkManager networkManager)
2930
// [Obsolete("Use the LogLevel directly on the NetworkManager instead")]
3031
public static LogLevel CurrentLogLevel => NetworkManager.Singleton == null ? LogLevel.Normal : NetworkManager.Singleton.LogLevel;
3132

32-
internal static LogConfiguration Config = new LogConfiguration();
33-
3433
// internal logging
3534

3635
/// <summary>
3736
/// Locally logs a info log with Netcode prefixing.
3837
/// </summary>
3938
/// <param name="message">The message to log</param>
4039
[HideInCallstack]
41-
public static void LogInfo(string message) => k_Log.Info(new Context(LogLevel.Normal, message));
40+
public static void LogInfo(string message) => k_Log.Info(new Context(LogLevel.Normal, message, true));
4241
[HideInCallstack]
4342
internal static void LogInfo(Context context) => k_Log.Info(context);
4443

@@ -47,7 +46,7 @@ internal static void SetNetworkManager(NetworkManager networkManager)
4746
/// </summary>
4847
/// <param name="message">The message to log</param>
4948
[HideInCallstack]
50-
public static void LogWarning(string message) => k_Log.Warning(new Context(LogLevel.Error, message));
49+
public static void LogWarning(string message) => k_Log.Warning(new Context(LogLevel.Error, message, true));
5150
[HideInCallstack]
5251
internal static void LogWarning(Context context) => k_Log.Warning(context);
5352

@@ -56,7 +55,7 @@ internal static void SetNetworkManager(NetworkManager networkManager)
5655
/// </summary>
5756
/// <param name="message">The message to log</param>
5857
[HideInCallstack]
59-
public static void LogError(string message) => k_Log.Error(new Context(LogLevel.Error, message));
58+
public static void LogError(string message) => k_Log.Error(new Context(LogLevel.Error, message, true));
6059
[HideInCallstack]
6160
internal static void LogError(Context context) => k_Log.Error(context);
6261

@@ -67,28 +66,28 @@ internal static void SetNetworkManager(NetworkManager networkManager)
6766
/// </summary>
6867
/// <param name="message">The message to log</param>
6968
[HideInCallstack]
70-
public static void LogInfoServer(string message) => k_Log.InfoServer(new Context(LogLevel.Normal, message));
69+
public static void LogInfoServer(string message) => k_Log.InfoServer(new Context(LogLevel.Normal, message, true));
7170

7271
/// <summary>
7372
/// Logs an info log locally and on the session owner if possible.
7473
/// </summary>
7574
/// <param name="message">The message to log</param>
7675
[HideInCallstack]
77-
public static void LogInfoSessionOwner(string message) => k_Log.InfoServer(new Context(LogLevel.Normal, message));
76+
public static void LogInfoSessionOwner(string message) => k_Log.InfoServer(new Context(LogLevel.Normal, message, true));
7877

7978
/// <summary>
8079
/// Logs a warning log locally and on the server if possible.
8180
/// </summary>
8281
/// <param name="message">The message to log</param>
8382
[HideInCallstack]
84-
public static void LogWarningServer(string message) => k_Log.WarningServer(new Context(LogLevel.Error, message));
83+
public static void LogWarningServer(string message) => k_Log.WarningServer(new Context(LogLevel.Error, message, true));
8584

8685
/// <summary>
8786
/// Logs an error log locally and on the server if possible.
8887
/// </summary>
8988
/// <param name="message">The message to log</param>
9089
[HideInCallstack]
91-
public static void LogErrorServer(string message) => k_Log.ErrorServer(new Context(LogLevel.Error, message));
90+
public static void LogErrorServer(string message) => k_Log.ErrorServer(new Context(LogLevel.Error, message, true));
9291

9392
internal static LogType GetMessageLogType(UnityEngine.LogType engineLogType)
9493
{
@@ -101,17 +100,6 @@ internal static LogType GetMessageLogType(UnityEngine.LogType engineLogType)
101100
};
102101
}
103102

104-
internal static void SendLogToAuthority(NetworkManager networkManager, LogType logType, ulong senderId, string message)
105-
{
106-
var networkMessage = new ServerLogMessage
107-
{
108-
LogType = logType,
109-
Message = message,
110-
SenderId = senderId
111-
};
112-
var size = networkManager.ConnectionManager.SendMessage(ref networkMessage, MessageDeliveryType<ServerLogMessage>.DefaultDelivery, NetworkManager.ServerClientId);
113-
networkManager.NetworkMetrics.TrackServerLogSent(NetworkManager.ServerClientId, (uint)logType, size);
114-
}
115103

116104
private const string k_SenderId = "SenderId";
117105
internal static Context BuildContextForServerMessage([NotNull] NetworkManager networkManager, LogLevel level, ulong senderId, string message)

com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -572,10 +572,7 @@ internal void ChangeOwnership(NetworkObject networkObject, ulong clientId, bool
572572

573573
if (!networkObject.Observers.Contains(clientId))
574574
{
575-
if (NetworkManager.LogLevel <= LogLevel.Developer)
576-
{
577-
NetworkLog.LogWarningServer($"[Invalid Owner] Cannot send Ownership change as client-{clientId} cannot see {networkObject.name}! Use {nameof(NetworkObject.NetworkShow)} first.");
578-
}
575+
NetworkManager.Log.WarningServer(new Context(LogLevel.Developer, $"Cannot send Ownership change as client cannot see {nameof(NetworkObject)}! Use {nameof(NetworkObject.NetworkShow)} first.").AddInfo("Invalid Client", clientId).AddTag(networkObject.name).AddObject(networkObject));
579576
return;
580577
}
581578

com.unity.netcode.gameobjects/Tests/Editor/NetworkManagerConfigurationTests.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Text.RegularExpressions;
33
using NUnit.Framework;
44
using Unity.Netcode.Editor;
5+
using Unity.Netcode.Logging;
56
using Unity.Netcode.Transports.UTP;
67
using UnityEditor.SceneManagement;
78
using UnityEngine;
@@ -39,11 +40,8 @@ public void NestedNetworkManagerCheck()
3940
// Make our NetworkManager's GameObject nested
4041
networkManagerObject.transform.parent = parent.transform;
4142

42-
// Pre-generate the error message we are expecting to see
43-
var messageToCheck = NetworkManager.GenerateNestedNetworkManagerMessage(networkManagerObject.transform);
44-
4543
// Trap for the nested NetworkManager exception
46-
LogAssert.Expect(LogType.Error, new Regex(messageToCheck));
44+
LogAssert.Expect(LogType.Error, new Regex("NetworkManager cannot be nested"));
4745

4846
// Since this is an in-editor test, we must force this invocation
4947
NetworkManagerHelper.Singleton.NotifyUserOfNestedNetworkManager(networkManager, false, true);
@@ -120,12 +118,11 @@ public void NestedNetworkObjectPrefabCheck()
120118
networkManager.OnValidate();
121119

122120
// Expect a warning
123-
LogAssert.Expect(LogType.Warning, new Regex($@"{parent.name}\] Prefab has child {nameof(NetworkObject)}\(s\) but they will not be spawned across the network \(unsupported {nameof(NetworkPrefab)} setup\)"));
121+
LogAssert.Expect(LogType.Warning, new Regex(@"Prefab has child NetworkObject\(s\) but they will not be spawned across the network"));
124122

125123
// Clean up
126124
Object.DestroyImmediate(networkManagerObject);
127125
Object.DestroyImmediate(parent);
128-
129126
}
130127

131128
[Test]

com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/OwnershipPermissionsTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,6 @@ public IEnumerator ChangeOwnershipWithoutObservers()
445445
// ChangeOwnership should fail
446446
authorityInstance.ChangeOwnership(otherClient.LocalClientId);
447447
var senderId = authority.LocalClientId;
448-
var receiverId = otherClient.LocalClientId;
449448
LogAssert.Expect(LogType.Warning, new Regex("Cannot send Ownership change as client cannot see NetworkObject"));
450449
Assert.True(authorityInstance.IsOwner, $"[Ownership Check] Client-{senderId} should still own this object!");
451450

com.unity.netcode.gameobjects/Tests/Runtime/NestedNetworkManagerTests.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Text.RegularExpressions;
12
using NUnit.Framework;
23
using Unity.Netcode.TestHelpers.Runtime;
34
using Unity.Netcode.Transports.UTP;
@@ -29,15 +30,8 @@ public void CheckNestedNetworkManager()
2930
// Make our NetworkManager's GameObject nested
3031
networkManagerObject.transform.parent = parent.transform;
3132

32-
// Generate the error message we are expecting to see
33-
var messageToCheck = NetworkManager.GenerateNestedNetworkManagerMessage(networkManagerObject.transform);
34-
3533
// Trap for the nested NetworkManager exception
36-
#if UNITY_EDITOR
37-
LogAssert.Expect(LogType.Error, messageToCheck);
38-
#else
39-
LogAssert.Expect(LogType.Exception, $"Exception: {messageToCheck}");
40-
#endif
34+
LogAssert.Expect(LogType.Error, new Regex("NetworkManager cannot be nested"));
4135

4236
// Clean up
4337
Object.Destroy(parent);

0 commit comments

Comments
 (0)