Skip to content

Commit c5dff6d

Browse files
perf: performance improvements MTT-4641 #2176 (#2204)
* Performance Improvement - Merge if else into return - Merge .rotation and .position into .SetPositionAndRotation - Remove .ToString() call on strings - Use TryGetComponent to reduce garbage allocation - Merge .Where().Count() calls into .Count() call - Remove indirect gameObject call - Remove redundant null check - Use native .Count instead of LINQ method - Use faster string comparison * style: adjusting to code standards Co-authored-by: smitdylan2001 <dylan.smit01@gmail.com>
1 parent 5989836 commit c5dff6d

File tree

11 files changed

+23
-41
lines changed

11 files changed

+23
-41
lines changed

com.unity.netcode.gameobjects/Components/NetworkTransform.cs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -282,14 +282,7 @@ public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReade
282282
{
283283
// Go ahead and mark the local state dirty or not dirty as well
284284
/// <see cref="TryCommitTransformToServer"/>
285-
if (HasPositionChange || HasRotAngleChange || HasScaleChange)
286-
{
287-
IsDirty = true;
288-
}
289-
else
290-
{
291-
IsDirty = false;
292-
}
285+
IsDirty = HasPositionChange || HasRotAngleChange || HasScaleChange;
293286
}
294287
}
295288
}
@@ -1150,8 +1143,7 @@ private void SetStateInternal(Vector3 pos, Quaternion rot, Vector3 scale, bool s
11501143
}
11511144
else
11521145
{
1153-
transform.position = pos;
1154-
transform.rotation = rot;
1146+
transform.SetPositionAndRotation(pos, rot);
11551147
}
11561148
transform.localScale = scale;
11571149
m_LocalAuthoritativeNetworkState.IsTeleportingNextFrame = shouldTeleport;

com.unity.netcode.gameobjects/Editor/CodeGen/INetworkMessageILPP.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
7373
}
7474
catch (Exception e)
7575
{
76-
m_Diagnostics.AddError((e.ToString() + e.StackTrace.ToString()).Replace("\n", "|").Replace("\r", "|"));
76+
m_Diagnostics.AddError((e.ToString() + e.StackTrace).Replace("\n", "|").Replace("\r", "|"));
7777
}
7878
}
7979
else

com.unity.netcode.gameobjects/Editor/CodeGen/INetworkSerializableILPP.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
9191
}
9292
catch (Exception e)
9393
{
94-
m_Diagnostics.AddError((e.ToString() + e.StackTrace.ToString()).Replace("\n", "|").Replace("\r", "|"));
94+
m_Diagnostics.AddError((e.ToString() + e.StackTrace).Replace("\n", "|").Replace("\r", "|"));
9595
}
9696
}
9797
else

com.unity.netcode.gameobjects/Editor/CodeGen/NetworkBehaviourILPP.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
7676
}
7777
catch (Exception e)
7878
{
79-
m_Diagnostics.AddError((e.ToString() + e.StackTrace.ToString()).Replace("\n", "|").Replace("\r", "|"));
79+
m_Diagnostics.AddError((e.ToString() + e.StackTrace).Replace("\n", "|").Replace("\r", "|"));
8080
}
8181
}
8282
else

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,7 @@ public static void CheckForNetworkObject(GameObject gameObject, bool networkObje
263263

264264
// Now get the root parent transform to the current GameObject (or itself)
265265
var rootTransform = GetRootParentTransform(gameObject.transform);
266-
var networkManager = rootTransform.GetComponent<NetworkManager>();
267-
if (networkManager == null)
266+
if (!rootTransform.TryGetComponent<NetworkManager>(out var networkManager))
268267
{
269268
networkManager = rootTransform.GetComponentInChildren<NetworkManager>();
270269
}
@@ -299,8 +298,7 @@ public static void CheckForNetworkObject(GameObject gameObject, bool networkObje
299298

300299
// Otherwise, check to see if there is any NetworkObject from the root GameObject down to all children.
301300
// If not, notify the user that NetworkBehaviours require that the relative GameObject has a NetworkObject component.
302-
var networkObject = rootTransform.GetComponent<NetworkObject>();
303-
if (networkObject == null)
301+
if (!rootTransform.TryGetComponent<NetworkObject>(out var networkObject))
304302
{
305303
networkObject = rootTransform.GetComponentInChildren<NetworkObject>();
306304

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private static void ScenesInBuildActiveSceneCheck()
6464
{
6565
var scenesList = EditorBuildSettings.scenes.ToList();
6666
var activeScene = SceneManager.GetActiveScene();
67-
var isSceneInBuildSettings = scenesList.Where((c) => c.path == activeScene.path).Count() == 1;
67+
var isSceneInBuildSettings = scenesList.Count((c) => c.path == activeScene.path) == 1;
6868
var networkManager = Object.FindObjectOfType<NetworkManager>();
6969
if (!isSceneInBuildSettings && networkManager != null)
7070
{
@@ -109,9 +109,8 @@ private static void EditorApplication_hierarchyChanged()
109109
public void CheckAndNotifyUserNetworkObjectRemoved(NetworkManager networkManager, bool editorTest = false)
110110
{
111111
// Check for any NetworkObject at the same gameObject relative layer
112-
var networkObject = networkManager.gameObject.GetComponent<NetworkObject>();
113112

114-
if (networkObject == null)
113+
if (!networkManager.gameObject.TryGetComponent<NetworkObject>(out var networkObject))
115114
{
116115
// if none is found, check to see if any children have a NetworkObject
117116
networkObject = networkManager.gameObject.GetComponentInChildren<NetworkObject>();

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

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class NetworkManager : MonoBehaviour, INetworkUpdateSystem
5151

5252
internal static string PrefabDebugHelper(NetworkPrefab networkPrefab)
5353
{
54-
return $"{nameof(NetworkPrefab)} \"{networkPrefab.Prefab.gameObject.name}\"";
54+
return $"{nameof(NetworkPrefab)} \"{networkPrefab.Prefab.name}\"";
5555
}
5656

5757
internal NetworkBehaviourUpdater BehaviourUpdater { get; set; }
@@ -187,8 +187,7 @@ public void Send(ulong clientId, NetworkDelivery delivery, FastBufferWriter batc
187187
/// <returns>a <see cref="GameObject"/> that is either the override or if no overrides exist it returns the same as the one passed in as a parameter</returns>
188188
public GameObject GetNetworkPrefabOverride(GameObject gameObject)
189189
{
190-
var networkObject = gameObject.GetComponent<NetworkObject>();
191-
if (networkObject != null)
190+
if (gameObject.TryGetComponent<NetworkObject>(out var networkObject))
192191
{
193192
if (NetworkConfig.NetworkPrefabOverrideLinks.ContainsKey(networkObject.GlobalObjectIdHash))
194193
{
@@ -519,8 +518,7 @@ internal void OnValidate()
519518
var networkPrefabGo = networkPrefab?.Prefab;
520519
if (networkPrefabGo != null)
521520
{
522-
var networkObject = networkPrefabGo.GetComponent<NetworkObject>();
523-
if (networkObject == null)
521+
if (!networkPrefabGo.TryGetComponent<NetworkObject>(out var networkObject))
524522
{
525523
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
526524
{
@@ -695,8 +693,7 @@ private bool ShouldAddPrefab(NetworkPrefab networkPrefab, out uint sourcePrefabG
695693
}
696694
else if (networkPrefab.Override == NetworkPrefabOverride.None)
697695
{
698-
networkObject = networkPrefab.Prefab.GetComponent<NetworkObject>();
699-
if (networkObject == null)
696+
if (!networkPrefab.Prefab.TryGetComponent(out networkObject))
700697
{
701698
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
702699
{
@@ -742,8 +739,7 @@ private bool ShouldAddPrefab(NetworkPrefab networkPrefab, out uint sourcePrefabG
742739
}
743740
else
744741
{
745-
networkObject = networkPrefab.SourcePrefabToOverride.GetComponent<NetworkObject>();
746-
if (networkObject == null)
742+
if (!networkPrefab.SourcePrefabToOverride.TryGetComponent(out networkObject))
747743
{
748744
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
749745
{
@@ -968,8 +964,7 @@ private void Initialize(bool server)
968964
// If we have a player prefab, then we need to verify it is in the list of NetworkPrefabOverrideLinks for client side spawning.
969965
if (NetworkConfig.PlayerPrefab != null)
970966
{
971-
var playerPrefabNetworkObject = NetworkConfig.PlayerPrefab.GetComponent<NetworkObject>();
972-
if (playerPrefabNetworkObject != null)
967+
if (NetworkConfig.PlayerPrefab.TryGetComponent<NetworkObject>(out var playerPrefabNetworkObject))
973968
{
974969
//In the event there is no NetworkPrefab entry (i.e. no override for default player prefab)
975970
if (!NetworkConfig.NetworkPrefabOverrideLinks.ContainsKey(playerPrefabNetworkObject

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ public static void NetworkHide(List<NetworkObject> networkObjects, ulong clientI
435435
private void OnDestroy()
436436
{
437437
if (NetworkManager != null && NetworkManager.IsListening && NetworkManager.IsServer == false && IsSpawned &&
438-
(IsSceneObject == null || (IsSceneObject != null && IsSceneObject.Value != true)))
438+
(IsSceneObject == null || (IsSceneObject.Value != true)))
439439
{
440440
throw new NotServerException($"Destroy a spawned {nameof(NetworkObject)} on a non-host client is not valid. Call {nameof(Destroy)} or {nameof(Despawn)} on the server/host instead.");
441441
}
@@ -690,8 +690,7 @@ private void OnTransformParentChanged()
690690
var parentTransform = transform.parent;
691691
if (parentTransform != null)
692692
{
693-
var parentObject = transform.parent.GetComponent<NetworkObject>();
694-
if (parentObject == null)
693+
if (!transform.parent.TryGetComponent<NetworkObject>(out var parentObject))
695694
{
696695
transform.parent = m_CachedParent;
697696
Debug.LogException(new InvalidParentException($"Invalid parenting, {nameof(NetworkObject)} moved under a non-{nameof(NetworkObject)} parent"));

com.unity.netcode.gameobjects/Runtime/SceneManagement/SceneEventData.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,9 +398,9 @@ internal void WriteSceneSynchronizationData(FastBufferWriter writer)
398398
int totalBytes = 0;
399399

400400
// Write the number of NetworkObjects we are serializing
401-
BytePacker.WriteValuePacked(writer, m_NetworkObjectsSync.Count());
401+
BytePacker.WriteValuePacked(writer, m_NetworkObjectsSync.Count);
402402
// Serialize all NetworkObjects that are spawned
403-
for (var i = 0; i < m_NetworkObjectsSync.Count(); ++i)
403+
for (var i = 0; i < m_NetworkObjectsSync.Count; ++i)
404404
{
405405
var noStart = writer.Position;
406406
var sceneObject = m_NetworkObjectsSync[i].GetMessageSceneObject(TargetClientId);
@@ -411,9 +411,9 @@ internal void WriteSceneSynchronizationData(FastBufferWriter writer)
411411
}
412412

413413
// Write the number of despawned in-scene placed NetworkObjects
414-
writer.WriteValueSafe(m_DespawnedInSceneObjectsSync.Count());
414+
writer.WriteValueSafe(m_DespawnedInSceneObjectsSync.Count);
415415
// Write the scene handle and GlobalObjectIdHash value
416-
for (var i = 0; i < m_DespawnedInSceneObjectsSync.Count(); ++i)
416+
for (var i = 0; i < m_DespawnedInSceneObjectsSync.Count; ++i)
417417
{
418418
var noStart = writer.Position;
419419
var sceneObject = m_DespawnedInSceneObjectsSync[i].GetMessageSceneObject(TargetClientId);

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,7 @@ public void RegisterHostGlobalObjectIdHashValues(GameObject sourceNetworkPrefab,
119119
// Now we register all
120120
foreach (var gameObject in networkPrefabOverrides)
121121
{
122-
var targetNetworkObject = gameObject.GetComponent<NetworkObject>();
123-
if (targetNetworkObject != null)
122+
if (gameObject.TryGetComponent<NetworkObject>(out var targetNetworkObject))
124123
{
125124
if (!m_PrefabInstanceToPrefabAsset.ContainsKey(targetNetworkObject.GlobalObjectIdHash))
126125
{

com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ private static NetworkEndpoint ParseNetworkEndpoint(string ip, ushort port)
306306
/// <summary>
307307
/// Endpoint (IP address and port) server will listen/bind on.
308308
/// </summary>
309-
public NetworkEndpoint ListenEndPoint => ParseNetworkEndpoint((ServerListenAddress == string.Empty) ? Address : ServerListenAddress, Port);
309+
public NetworkEndpoint ListenEndPoint => ParseNetworkEndpoint((ServerListenAddress?.Length == 0) ? Address : ServerListenAddress, Port);
310310
}
311311

312312
/// <summary>

0 commit comments

Comments
 (0)