Single player sessions
Netcode for GameObjects provides a SinglePlayerTransport that derives from NetworkTransport.
You can use the SinglePlayerTransport to run a single player session without having to modify your primary networking script.
Add the single player transport
- Add the
SinglePlayerTransportto your NetworkManager. - You can create a custom
MonoBehaviourcomponent to handle your connection flow or you can derive fromNetworkManagerand 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
SinglePlayerTransportto theNetworkManager.NetworkConfig.NetworkTransport. - When starting a multiplayer session, prior to starting the NetworkManager, you will want to assign the
UnityTransport(or any otherNetworkTransportderived class that you might use for multiplayer sessions) to theNetworkManager.NetworkConfig.NetworkTransport.
- When starting a single player session, prior to starting the NetworkManager as a host (required), you will want to assign the
Example script
The following is an example component script that provides a single method to start a single or multiplayer session:
/// <summary>
/// Example of how to start a single player or multiplayer session.
/// Place this on your NetworkManager's GameObject.
/// </summary>
internal class SwitchingTransportTypesExample : MonoBehaviour
{
public enum StartType
{
SinglePlayer,
Client,
Host,
Server
}
private UnityTransport m_UnityTransport;
private SinglePlayerTransport m_SinglePlayerTransport;
private NetworkManager m_NetworkManager;
private void Awake()
{
m_UnityTransport = GetComponent<UnityTransport>();
m_SinglePlayerTransport = GetComponent<SinglePlayerTransport>();
m_NetworkManager = GetComponent<NetworkManager>();
}
public bool StartSession(StartType startType)
{
var startStatus = false;
// Set the transport to use before starting
m_NetworkManager.NetworkConfig.NetworkTransport = startType == StartType.SinglePlayer ? m_SinglePlayerTransport : m_UnityTransport;
switch (startType)
{
case StartType.Host:
case StartType.SinglePlayer:
{
// Starting a host or single player is the same
startStatus = m_NetworkManager.StartHost();
break;
}
case StartType.Server:
{
startStatus = m_NetworkManager.StartServer();
break;
}
case StartType.Client:
{
startStatus = m_NetworkManager.StartClient();
break;
}
}
return startStatus;
}
}