I’ve started a new Unity tutorial series about creating a multiplayer-ready main menu system using Unity Netcode. The goal of this series is to show how to build a clean and scalable menu architecture that can be used as a foundation for multiplayer games.
What will be included at the end of this tutorial series:
Startup Architecture
Dedicated Startup Scene that initializes core systems
Managers like NetworkManager, ConnectionManager, and GameManager
Objects persist across scenes via DontDestroyOnLoad
The Startup Scene runs only once and is never loaded again
Main Menu System
Clean Main Menu UI with buttons for:
Local Game
Online Game
Quit
Background image and basic UI layout
Local Multiplayer Menu
Dedicated Local Game Panel
Input fields for IP Address and Port
Buttons for starting as Host or Client
Connection Logic
Script to start a Host or Client connection
UI inputs are used to configure IP and Port
Connection Status UI
Displays whether the game is running as Host, Client, or Server
Helpful for debugging and testing multiplayer setups
Quality of Life Features
Automatically fills default IP address and port in the UI
A script in every scene you want to launch with, which additively loads the NetworkManager scene (or a prefab) but only if it doesn’t yet exist.
I prefer the first option since it forces you to structure the scene flow accordingly, and whenever you want to “launch through” to a specific gameplay scene without much fuzz you’d have a (editor only) launch script where you configure which scene to actually load, what settings to apply, etc.