From 952985deeb0b3a799c46ded9151b415a580d89ca Mon Sep 17 00:00:00 2001 From: Emma Date: Fri, 15 May 2026 16:12:58 -0400 Subject: [PATCH 1/5] chore: Add obsolete warnings to unused or invalid methods --- .../CodeGen/RuntimeAccessModifiersILPP.cs | 35 ------------------- .../Editor/NetworkBehaviourEditor.cs | 12 ++----- .../Runtime/Core/NetworkManager.cs | 3 ++ .../Collections/NetworkList.cs | 10 ++---- .../Runtime/Spawning/NetworkSpawnManager.cs | 3 +- .../Assets/Tests/Runtime/RpcTestsAutomated.cs | 10 +++--- 6 files changed, 15 insertions(+), 58 deletions(-) diff --git a/com.unity.netcode.gameobjects/Editor/CodeGen/RuntimeAccessModifiersILPP.cs b/com.unity.netcode.gameobjects/Editor/CodeGen/RuntimeAccessModifiersILPP.cs index 57295be52e..d982d30a73 100644 --- a/com.unity.netcode.gameobjects/Editor/CodeGen/RuntimeAccessModifiersILPP.cs +++ b/com.unity.netcode.gameobjects/Editor/CodeGen/RuntimeAccessModifiersILPP.cs @@ -47,9 +47,6 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly) switch (typeDefinition.Name) { - case nameof(NetworkManager): - ProcessNetworkManager(typeDefinition, compiledAssembly.Defines); - break; case nameof(NetworkBehaviour): ProcessNetworkBehaviour(typeDefinition); break; @@ -90,38 +87,6 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly) return new ILPostProcessResult(new InMemoryAssembly(pe.ToArray(), pdb.ToArray()), m_Diagnostics); } - // TODO: Deprecate... - // This is changing accessibility for values that are no longer used, but since our validator runs - // after ILPP and sees those values as public, they cannot be removed until a major version change. - private void ProcessNetworkManager(TypeDefinition typeDefinition, string[] assemblyDefines) - { - foreach (var fieldDefinition in typeDefinition.Fields) - { - if (fieldDefinition.Name == nameof(NetworkManager.__rpc_func_table)) - { - fieldDefinition.IsPublic = true; - } - - if (fieldDefinition.Name == nameof(NetworkManager.RpcReceiveHandler)) - { - fieldDefinition.IsPublic = true; - } - - if (fieldDefinition.Name == nameof(NetworkManager.__rpc_name_table)) - { - fieldDefinition.IsPublic = true; - } - } - - foreach (var nestedTypeDefinition in typeDefinition.NestedTypes) - { - if (nestedTypeDefinition.Name == nameof(NetworkManager.RpcReceiveHandler)) - { - nestedTypeDefinition.IsNestedPublic = true; - } - } - } - private void ProcessNetworkBehaviour(TypeDefinition typeDefinition) { foreach (var nestedType in typeDefinition.NestedTypes) diff --git a/com.unity.netcode.gameobjects/Editor/NetworkBehaviourEditor.cs b/com.unity.netcode.gameobjects/Editor/NetworkBehaviourEditor.cs index 1312ff69e6..d3445d8482 100644 --- a/com.unity.netcode.gameobjects/Editor/NetworkBehaviourEditor.cs +++ b/com.unity.netcode.gameobjects/Editor/NetworkBehaviourEditor.cs @@ -326,14 +326,8 @@ private void OnEnable() /// /// The current we are inspecting for a parent /// the root parent for the first passed into the method - public static Transform GetRootParentTransform(Transform transform) - { - if (transform.parent == null || transform.parent == transform) - { - return transform; - } - return GetRootParentTransform(transform.parent); - } + [Obsolete("Use transform.root instead")] + public static Transform GetRootParentTransform(Transform transform) => transform.root; /// /// Used to determine if a GameObject has one or more NetworkBehaviours but @@ -358,7 +352,7 @@ public static void CheckForNetworkObject(GameObject gameObject, bool networkObje } // Now get the root parent transform to the current GameObject (or itself) - var rootTransform = GetRootParentTransform(gameObject.transform); + var rootTransform = gameObject.transform.root; if (!rootTransform.TryGetComponent(out var networkManager)) { networkManager = rootTransform.GetComponentInChildren(); diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 8fc97dd84e..55fdd6dbf8 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -44,12 +44,15 @@ public class NetworkManager : MonoBehaviour, INetworkUpdateSystem #pragma warning disable IDE1006 // disable naming rule violation check // RuntimeAccessModifiersILPP will make this `public` + [Obsolete("This field is no longer used and will be removed in a future version.")] internal delegate void RpcReceiveHandler(NetworkBehaviour behaviour, FastBufferReader reader, __RpcParams parameters); // RuntimeAccessModifiersILPP will make this `public` + [Obsolete("This field is no longer used and will be removed in a future version.")] internal static readonly Dictionary __rpc_func_table = new Dictionary(); // RuntimeAccessModifiersILPP will make this `public` (legacy table should be removed in v3.x.x) + [Obsolete("This field is no longer used and will be removed in a future version.")] internal static readonly Dictionary __rpc_name_table = new Dictionary(); #pragma warning restore IDE1006 // restore naming rule violation check diff --git a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs index aafeeb2ab4..9c0cb4bd83 100644 --- a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs +++ b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs @@ -683,14 +683,8 @@ private void HandleAddListEvent(NetworkListEvent listEvent) /// /// This method should not be used. It is left over from a previous interface /// - public int LastModifiedTick - { - get - { - // todo: implement proper network tick for NetworkList - return NetworkTickSystem.NoTick; - } - } + [Obsolete("This property is no longer used and will be removed in a future version.")] + public int LastModifiedTick => NetworkTickSystem.NoTick; /// /// Overridden implementation. diff --git a/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs b/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs index 52e891f8e1..2f6a76f6fb 100644 --- a/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs @@ -448,6 +448,7 @@ private bool TryGetNetworkClient(ulong clientId, out NetworkClient networkClient /// /// not used /// not used + [Obsolete("This method is no longer used and will be removed in a future version.")] protected virtual void InternalOnOwnershipChanged(ulong perviousOwner, ulong newOwner) { @@ -999,7 +1000,7 @@ internal NetworkObject CreateLocalNetworkObject(NetworkObject.SerializedObject s networkObject.DestroyWithScene = serializedObject.DestroyWithScene; networkObject.NetworkSceneHandle = serializedObject.NetworkSceneHandle; - networkObject.DontDestroyWithOwner = serializedObject.DontDestroyWithOwner; + networkObject.DestroyWithOwner = serializedObject.DestroyWithOwner; networkObject.Ownership = (NetworkObject.OwnershipStatus)serializedObject.OwnershipFlags; var nonNetworkObjectParent = false; diff --git a/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs b/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs index 228bfbfdd5..1ab9c45c9a 100644 --- a/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs +++ b/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs @@ -120,16 +120,16 @@ private IEnumerator AutomatedRpcTestsHandler(int numClients) Assert.IsFalse(m_TimedOut); // Log the output for visual confirmation (Acceptance Test for this test) that all RPC test types (tracked by counters) executed multiple times - Debug.Log("Final Host-Server Status Info:"); - Debug.Log(serverRpcTests.GetCurrentServerStatusInfo()); + VerboseDebug("Final Host-Server Status Info:"); + VerboseDebug(serverRpcTests.GetCurrentServerStatusInfo()); foreach (var rpcClientSideTest in clientRpcQueueManualTestInstsances) { - Debug.Log($"Final Client {rpcClientSideTest.NetworkManager.LocalClientId} Status Info:"); - Debug.Log(rpcClientSideTest.GetCurrentClientStatusInfo()); + VerboseDebug($"Final Client {rpcClientSideTest.NetworkManager.LocalClientId} Status Info:"); + VerboseDebug(rpcClientSideTest.GetCurrentClientStatusInfo()); } - Debug.Log($"Total frames updated = {Time.frameCount - startFrameCount} within {Time.realtimeSinceStartup - startTime} seconds."); + VerboseDebug($"Total frames updated = {Time.frameCount - startFrameCount} within {Time.realtimeSinceStartup - startTime} seconds."); } } } From 3915309d17373407108c95069897d6818c0c91e0 Mon Sep 17 00:00:00 2001 From: Emma Date: Fri, 15 May 2026 16:18:40 -0400 Subject: [PATCH 2/5] Update CHANGELOG --- com.unity.netcode.gameobjects/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md index 9d1075d0b3..2f808dfae3 100644 --- a/com.unity.netcode.gameobjects/CHANGELOG.md +++ b/com.unity.netcode.gameobjects/CHANGELOG.md @@ -16,6 +16,7 @@ Additional documentation and release notes are available at [Multiplayer Documen ### Deprecated +- Deprecated a number of methods that were no longer valid or being used. (#3987) ### Removed From d450c988cad6afd4791565e9b0fbad5ed8acdae0 Mon Sep 17 00:00:00 2001 From: Emma Date: Fri, 15 May 2026 16:38:53 -0400 Subject: [PATCH 3/5] dotnet-fix --- testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs b/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs index 1ab9c45c9a..1332aed20a 100644 --- a/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs +++ b/testproject/Assets/Tests/Runtime/RpcTestsAutomated.cs @@ -6,7 +6,6 @@ using Unity.Netcode.TestHelpers.Runtime; using UnityEngine; using UnityEngine.TestTools; -using Debug = UnityEngine.Debug; namespace TestProject.RuntimeTests { From 008dea9f68ff90c7ce1ee81bfc88e99adcf39e2d Mon Sep 17 00:00:00 2001 From: Emma Date: Fri, 15 May 2026 16:43:41 -0400 Subject: [PATCH 4/5] remove duplication of GetRootParentTransform --- .../Manual/NestedNetworkTransforms/ChildMover.cs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/testproject/Assets/Tests/Manual/NestedNetworkTransforms/ChildMover.cs b/testproject/Assets/Tests/Manual/NestedNetworkTransforms/ChildMover.cs index f731d6fe95..efaceb4a38 100644 --- a/testproject/Assets/Tests/Manual/NestedNetworkTransforms/ChildMover.cs +++ b/testproject/Assets/Tests/Manual/NestedNetworkTransforms/ChildMover.cs @@ -45,20 +45,11 @@ public void PlayerIsMoving(float movementDirection) } } - private Transform GetRootParentTransform(Transform transform) - { - if (transform.parent != null) - { - return GetRootParentTransform(transform.parent); - } - return transform; - } - protected override void OnNetworkPostSpawn() { if (CanCommitToTransform) { - m_RootParentTransform = GetRootParentTransform(transform); + m_RootParentTransform = transform.root; if (RandomizeScale) { transform.localScale = transform.localScale * Random.Range(0.5f, 1.5f); From 640906b7d017e45f34103c20ea8148504a8be8e3 Mon Sep 17 00:00:00 2001 From: Emma Date: Fri, 15 May 2026 17:34:24 -0400 Subject: [PATCH 5/5] Remove unrelated change --- .../Runtime/Spawning/NetworkSpawnManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs b/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs index 2f6a76f6fb..7a2f45b1d1 100644 --- a/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs @@ -1000,7 +1000,7 @@ internal NetworkObject CreateLocalNetworkObject(NetworkObject.SerializedObject s networkObject.DestroyWithScene = serializedObject.DestroyWithScene; networkObject.NetworkSceneHandle = serializedObject.NetworkSceneHandle; - networkObject.DestroyWithOwner = serializedObject.DestroyWithOwner; + networkObject.DontDestroyWithOwner = serializedObject.DontDestroyWithOwner; networkObject.Ownership = (NetworkObject.OwnershipStatus)serializedObject.OwnershipFlags; var nonNetworkObjectParent = false;