docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    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 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

    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;
        }
    }
    
    In This Article
    Back to top
    Copyright © 2026 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)