From cf054210d4ed79b0470df07fde366d982083a4ce Mon Sep 17 00:00:00 2001 From: Simon Lemay Date: Tue, 12 May 2026 11:53:57 -0400 Subject: [PATCH 1/3] feat: Make custom driver construction smoother --- com.unity.netcode.gameobjects/CHANGELOG.md | 2 ++ .../UTP/INetworkStreamDriverConstructor.cs | 3 +-- .../UTP/NetworkMetricsPipelineStage.cs | 4 ---- .../Runtime/Transports/UTP/UnityTransport.cs | 22 +++++++++++++++---- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md index 9d1075d0b3..009b95b9f2 100644 --- a/com.unity.netcode.gameobjects/CHANGELOG.md +++ b/com.unity.netcode.gameobjects/CHANGELOG.md @@ -10,9 +10,11 @@ Additional documentation and release notes are available at [Multiplayer Documen ### Added +- Added a new variant of `UnityTransport.GetDefaultPipelineConfigurations` that takes a reference to the created `NetworkDriver`. This will register all pipeline stages that `UnityTransport` requires, removing the need to manually register them in your own custom driver constructor. ### Changed +- `NetworkMetricsPipelineStage` is now defined even when the multiplayer tools package is not installed, removing the need to guard its registration behind a version define when using a custom driver in `UnityTransport`. ### Deprecated diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/INetworkStreamDriverConstructor.cs b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/INetworkStreamDriverConstructor.cs index 8e07c0d3e4..c07c8c1484 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/INetworkStreamDriverConstructor.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/INetworkStreamDriverConstructor.cs @@ -36,9 +36,8 @@ namespace Unity.Netcode.Transports.UTP /// var settings = transport.GetDefaultNetworkSettings(); /// driver = NetworkDriver.Create(new IPCNetworkInterface(), settings); /// - /// driver.RegisterPipelineStage(new NetworkMetricsPipelineStage()); - /// /// transport.GetDefaultPipelineConfigurations( + /// ref driver, /// out var unreliableFragmentedPipelineStages, /// out var unreliableSequencedFragmentedPipelineStages, /// out var reliableSequencedPipelineStages); diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/NetworkMetricsPipelineStage.cs b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/NetworkMetricsPipelineStage.cs index c602aef739..de1e7899b9 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/NetworkMetricsPipelineStage.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/NetworkMetricsPipelineStage.cs @@ -1,5 +1,3 @@ -#if MULTIPLAYER_TOOLS -#if MULTIPLAYER_TOOLS_1_0_0_PRE_7 using AOT; using Unity.Burst; using Unity.Collections.LowLevel.Unsafe; @@ -70,5 +68,3 @@ private static void InitializeConnection(byte* staticInstanceBuffer, int staticI } } } -#endif -#endif diff --git a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs index b39fe2bc94..e392af403c 100644 --- a/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs +++ b/com.unity.netcode.gameobjects/Runtime/Transports/UTP/UnityTransport.cs @@ -657,6 +657,23 @@ public void GetDefaultPipelineConfigurations( reliableSequencedPipelineStages = new(reliableSequenced, Allocator.Temp); } + /// + /// Driver for which the pipeline configurations are being retrieved. + public void GetDefaultPipelineConfigurations( + ref NetworkDriver driver, + out NativeArray unreliableFragmentedPipelineStages, + out NativeArray unreliableSequencedFragmentedPipelineStages, + out NativeArray reliableSequencedPipelineStages) + { +#if MULTIPLAYER_TOOLS_1_0_0_PRE_7 + driver.RegisterPipelineStage(new NetworkMetricsPipelineStage()); +#endif + GetDefaultPipelineConfigurations( + out unreliableFragmentedPipelineStages, + out unreliableSequencedFragmentedPipelineStages, + out reliableSequencedPipelineStages); + } + private NetworkPipeline SelectSendPipeline(NetworkDelivery delivery) { switch (delivery) @@ -1860,11 +1877,8 @@ public void CreateDriver( #endif } -#if MULTIPLAYER_TOOLS_1_0_0_PRE_7 - driver.RegisterPipelineStage(new NetworkMetricsPipelineStage()); -#endif - GetDefaultPipelineConfigurations( + ref driver, out var unreliableFragmentedPipelineStages, out var unreliableSequencedFragmentedPipelineStages, out var reliableSequencedPipelineStages); From f18b2b9eaa7297c46b5c570978df1f3321a07daa Mon Sep 17 00:00:00 2001 From: Simon Lemay Date: Tue, 12 May 2026 12:05:49 -0400 Subject: [PATCH 2/3] Add PR number to CHANGELOG entries --- com.unity.netcode.gameobjects/CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md index 009b95b9f2..0d8fb3a2fb 100644 --- a/com.unity.netcode.gameobjects/CHANGELOG.md +++ b/com.unity.netcode.gameobjects/CHANGELOG.md @@ -10,11 +10,11 @@ Additional documentation and release notes are available at [Multiplayer Documen ### Added -- Added a new variant of `UnityTransport.GetDefaultPipelineConfigurations` that takes a reference to the created `NetworkDriver`. This will register all pipeline stages that `UnityTransport` requires, removing the need to manually register them in your own custom driver constructor. +- Added a new variant of `UnityTransport.GetDefaultPipelineConfigurations` that takes a reference to the created `NetworkDriver`. This will register all pipeline stages that `UnityTransport` requires, removing the need to manually register them in your own custom driver constructor. (#3980) ### Changed -- `NetworkMetricsPipelineStage` is now defined even when the multiplayer tools package is not installed, removing the need to guard its registration behind a version define when using a custom driver in `UnityTransport`. +- `NetworkMetricsPipelineStage` is now defined even when the multiplayer tools package is not installed, removing the need to guard its registration behind a version define when using a custom driver in `UnityTransport`. (#3980) ### Deprecated From 4e8d97afc76ad93a06a610746b71f8d4d2f8f40c Mon Sep 17 00:00:00 2001 From: Simon Lemay Date: Tue, 12 May 2026 16:31:49 -0400 Subject: [PATCH 3/3] Update package version --- com.unity.netcode.gameobjects/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/com.unity.netcode.gameobjects/package.json b/com.unity.netcode.gameobjects/package.json index 04492deaa0..bd77e48697 100644 --- a/com.unity.netcode.gameobjects/package.json +++ b/com.unity.netcode.gameobjects/package.json @@ -2,7 +2,7 @@ "name": "com.unity.netcode.gameobjects", "displayName": "Netcode for GameObjects", "description": "Netcode for GameObjects is a high-level netcode SDK that provides networking capabilities to GameObject/MonoBehaviour workflows within Unity and sits on top of underlying transport layer.", - "version": "2.11.3", + "version": "2.12.0", "unity": "6000.0", "dependencies": { "com.unity.nuget.mono-cecil": "1.11.4", @@ -15,4 +15,4 @@ "path": "Samples~/Bootstrap" } ] -} \ No newline at end of file +}