From a614f31a47d9d43b1ba7f31b962945d23099eea4 Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Tue, 30 Jun 2026 17:45:17 -0500 Subject: [PATCH 1/2] update adding single player session section under the configuration area after transports. --- .../Documentation~/TableOfContents.md | 1 + .../advanced-topics/singleplayer.md | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 com.unity.netcode.gameobjects/Documentation~/advanced-topics/singleplayer.md diff --git a/com.unity.netcode.gameobjects/Documentation~/TableOfContents.md b/com.unity.netcode.gameobjects/Documentation~/TableOfContents.md index e78e7192f6..45da3a8740 100644 --- a/com.unity.netcode.gameobjects/Documentation~/TableOfContents.md +++ b/com.unity.netcode.gameobjects/Documentation~/TableOfContents.md @@ -18,6 +18,7 @@ * [Connection approval](basics/connection-approval.md) * [Max players](basics/maxnumberplayers.md) * [Transports](advanced-topics/transports.md) + * [Single player sessions](advanced-topics/singleplayer.md) * [Unity Relay](relay/relay.md) * [Command-line arguments](command-line-arguments.md) * [Network components](network-components.md) diff --git a/com.unity.netcode.gameobjects/Documentation~/advanced-topics/singleplayer.md b/com.unity.netcode.gameobjects/Documentation~/advanced-topics/singleplayer.md new file mode 100644 index 0000000000..9d2c9d91c6 --- /dev/null +++ b/com.unity.netcode.gameobjects/Documentation~/advanced-topics/singleplayer.md @@ -0,0 +1,77 @@ +# Single player sessions + +Netcode for GameObjects provides a [SinglePlayerTransport](https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/api/Unity.Netcode.Transports.SinglePlayer.SinglePlayerTransport.html) which derives from [NetworkTransport](https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/api/Unity.Netcode.NetworkTransport.html). + +This provides the ability to run a hosted session using the single player transport without having to modify your primary netcode script. + +## Adding the single player transport + +- Add the `SinglePlayerTransport` to your NetworkManager. +- You can create a custom `MonoBehaviour` component to handle your connection flow or you can derive from `NetworkManager` and add additional methods/logic to handle starting a single player session or multiplayer session. + - When starting a single player session, prior to starting the NetworkManager as a host (_required_), you will want to assign the `SinglePlayerTransport` to the `NetworkManager.NetworkConfig.NetworkTransport`. + - When starting a multiplayer session, prior to starting the NetworkManager, you will want to assign the `UnityTransport` (_or any other `NetworkTransport` derived class that you might use for multiplayer sessions_) to the `NetworkManager.NetworkConfig.NetworkTransport`. + +## Example script + +Below is an example script that derives from NetworkManager to provide a single method to start a single or multi player session: + +```csharp +using Unity.Netcode; +using Unity.Netcode.Transports.SinglePlayer; +using Unity.Netcode.Transports.UTP; + +/// +/// Example of how to start a single player or multiplayer session. +/// +public class ExtendedNetworkManager : NetworkManager +{ + private UnityTransport m_UnityTransport; + private SinglePlayerTransport m_SinglePlayerTransport; + + public bool StartSinglePlayer() + { + NetworkConfig.NetworkTransport = m_SinglePlayerTransport; + return StartHost(); + } + + public enum StartType + { + SinglePlayer, + Client, + Host, + Server + } + + private void Awake() + { + m_UnityTransport = GetComponent(); + m_SinglePlayerTransport = GetComponent(); + } + + public bool StartSession(StartType startType) + { + var startStatus = false; + NetworkConfig.NetworkTransport = startType == StartType.SinglePlayer ? m_SinglePlayerTransport : m_UnityTransport; + switch (startType) + { + case StartType.Host: + case StartType.SinglePlayer: + { + startStatus = StartHost(); + break; + } + case StartType.Server: + { + startStatus = StartServer(); + break; + } + case StartType.Client: + { + startStatus = StartClient(); + break; + } + } + return startStatus; + } +} +``` From 9ec8f89de3ae1d6b19f3759dac74bd86de49c6ef Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Wed, 1 Jul 2026 12:05:07 -0500 Subject: [PATCH 2/2] Refactor ExtendedNetworkManager for single player Rearranged variable declarations and removed StartSinglePlayer method. --- .../Documentation~/advanced-topics/singleplayer.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/com.unity.netcode.gameobjects/Documentation~/advanced-topics/singleplayer.md b/com.unity.netcode.gameobjects/Documentation~/advanced-topics/singleplayer.md index 9d2c9d91c6..6d326df2ef 100644 --- a/com.unity.netcode.gameobjects/Documentation~/advanced-topics/singleplayer.md +++ b/com.unity.netcode.gameobjects/Documentation~/advanced-topics/singleplayer.md @@ -25,15 +25,6 @@ using Unity.Netcode.Transports.UTP; /// public class ExtendedNetworkManager : NetworkManager { - private UnityTransport m_UnityTransport; - private SinglePlayerTransport m_SinglePlayerTransport; - - public bool StartSinglePlayer() - { - NetworkConfig.NetworkTransport = m_SinglePlayerTransport; - return StartHost(); - } - public enum StartType { SinglePlayer, @@ -42,6 +33,9 @@ public class ExtendedNetworkManager : NetworkManager Server } + private UnityTransport m_UnityTransport; + private SinglePlayerTransport m_SinglePlayerTransport; + private void Awake() { m_UnityTransport = GetComponent();