Create a command-line helper for testing
This page walks you through how to create a command-line helper that launches your project outside the Unity Editor to make testing builds easier.
Using a command-line helper script to launch multiple instances of a game build isn't the only way to test a multiplayer game. You can also use the Unity Editor or the Multiplayer Play Mode package.
Create the command-line helper
- Right-click the Assets folder in the Projects tab, then select Create > Folder.
- Name the new folder Scripts.
- Right-click the Scripts folder you created, then select Create > C# Script.
- Name the script NetworkCommandLine.
- Right-click on NetworkManager within the Hierarchy list, then select Create Empty.
- Name the new GameObject NetworkCommandLine.
- With the NetworkCommandLineGameObject selected, select Add Component from the Inspector tab.
- For the new component, select Scripts > Network Command Line (the NetworkCommandLine.csscript you created earlier).
- Double-click on the NetworkCommandLine.cs script from the Project tab to open it in a text editor.
- Edit the NetworkCommandLine.csscript to match the following code snippet:
using System.Collections.Generic;
using Unity.Netcode;
using UnityEngine;
public class NetworkCommandLine : MonoBehaviour
{
   private NetworkManager netManager;
   void Start()
   {
       netManager = GetComponentInParent<NetworkManager>();
       if (Application.isEditor) return;
       var args = GetCommandlineArgs();
       if (args.TryGetValue("-mode", out string mode))
       {
           switch (mode)
           {
               case "server":
                   netManager.StartServer();
                   break;
               case "host":
                   netManager.StartHost();
                   break;
               case "client":
                   netManager.StartClient();
                   break;
           }
       }
   }
   private Dictionary<string, string> GetCommandlineArgs()
   {
       Dictionary<string, string> argDictionary = new Dictionary<string, string>();
       var args = System.Environment.GetCommandLineArgs();
       for (int i = 0; i < args.Length; ++i)
       {
           var arg = args[i].ToLower();
           if (arg.StartsWith("-"))
           {
               var value = i < args.Length - 1 ? args[i + 1].ToLower() : null;
               value = (value?.StartsWith("-") ?? false) ? null : value;
               argDictionary.Add(arg, value);
           }
       }
       return argDictionary;
   }
}
- Save the file, then return to the Unity Editor.
- Open the Build Settings window by selecting File > Build Settings.
- Select Player Settings….
- Beneath Settings for PC, Mac, & Linux Standalone, select Resolution and Presentation to open the section options.
- From Resolution > Fullscreen Mode, change Fullscreen Window to Windowed.
- Return to the Editor main window and save your scene.
Test the command-line helper
Follow these instructions to test that the command-line helper script works.
- Select File > Build and Run.
- Create a new folder called Buildinside your Hello World project folder.
- Save As the binary HelloWorld.
Saving the project in this way causes the Unity Editor to build and launch the project in a new window. After it launches (and displays the plane), close the window you just launched.
Test on Windows
To test on Windows:
- Open the Command Prompt.
- Use the following command to launch the server and the client. Make sure to replace the placeholder text within the angled brackets (< >) for all commands.- You might get a UAC prompt requesting permission to run the executable. Allow the executable to run to continue.
 
Command to start the server:
<Path to Project>\HelloWorld.exe -mode server
Command to start the client:
<path to project>\HelloWorld.exe -mode client
To run these commands on a single line:
<path to project>\HelloWorld.exe -mode server & <path to project>\HelloWorld.exe -mode client
Here's an example of what your command might look like when you replace the placeholder text in < >:
<path to project>\HelloWorld.exe -mode server & <path to project>\HelloWorld.exe -mode client
There's no standard out stream on Windows by default, so you need to view the Debug.log file for the outputs. You can find the Debug.log files in:
C:\Users\username\AppData\LocalLow\CompanyName\ProductName\Player.log
Where the CompanyName defaults to DefaultCompany for a new project and ProductName equals to the project's name.
You can also change the Windows commands to create a log.txt file in the same folder as your HelloWorld folder.
Change the commands as follows:
Server command:
<Path to Project>\HelloWorld.exe -logfile log-server.txt -mode server
Client command:
<Path to Project>\HelloWorld.exe  -logfile log-client.txt -mode client
Example (Running as a single command line):
C:\Users\sarao>HelloWorld\Build\HelloWorld.exe -logfile log-server.txt -mode server & HelloWorld\Build\HelloWorld.exe -logfile log-client.txt -mode client
Test on macOS
Use the following instructions if you're using macOS:
- Open the Terminal app.
- Use the following command to launch the server and the client. Make sure to replace the placeholder text within the angled brackets (< >) for all commands.
Command to start the server:
<Path to Project>/HelloWorld.app/Contents/MacOS/<Project Name> -mode server -logfile -
Command to start the client:
<Path to Project>/HelloWorld.app/Contents/MacOS/<Project Name> -mode client -logfile -
To run both as a single command:
<Path to Project>/HelloWorld.app/Contents/MacOS/<Project Name> -mode server -logfile - & <Path to Project>HelloWorld.app/Contents/MacOS/<Project Name> -mode client -logfile -