diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md
index 9d1075d0b3..0d8fb3a2fb 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. (#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`. (#3980)
### 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);
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
+}