Version: 2020.1
Multiplayer and Networking
Setting up a multiplayer project

Multiplayer Overview

Note: UNet is deprecated, and will be removed from Unity in the future. A new system is under development. For more information and next steps see this blog post.

There are two kinds of users for the Networking feature:

  • Users making a Multiplayer game with Unity. These users should start with the NetworkManager or the High Level API.
  • Users building network infrastructure or advanced multiplayer games. These users should start with the NetworkTransport API.

High level scripting API

Unity’s networking has a “high-level” scripting API (which we’ll refer to as the HLAPI). Using this means you get access to commands which cover most of the common requirements for multiuser games without needing to worry about the “lower level” implementation details. The HLAPI allows you to:

  • Control the networked state of the game using a “Network Manager”.
  • Operate “client hosted” games, where the host is also a player client.
  • Serialize data using a general-purpose serializer.
  • Send and receive network messages.
  • Send networked commands from clients to servers.
  • Make remote procedure calls (RPCs) from servers to clients.
  • Send networked events from servers to clients.

Engine and Editor integration

Unity’s networking is integrated into the engine and the editor, allowing you to work with components and visual aids to build your multiplayer game. It provides:

  • A NetworkIdentity component for networked objects.
  • A NetworkBehaviour for networked scripts.
  • Configurable automatic synchronization of object transforms.
  • Automatic synchronization of script variables.
  • Support for placing networked objects in Unity scenes.
  • Network components

Internet Services

Unity offers Internet Services to support your game throughout production and release, which includes:

  • Matchmaking service
  • Create matches and advertise matches.
  • List available matches and join matches.
  • Relay server
  • Game-play over internet with no dedicated server.
  • Routing of messages for participants of matches.

NetworkTransport real-time transport layer

We include a Real-Time Transport Layer that offers:

  • Optimized UDP based protocol.
  • Multi-channel design to avoid head-of-line blocking issues
  • Support for a variety of levels of Quality of Service (QoS) per channel.
  • Flexible network topology that supports peer-to-peer or client-server architectures.

Authentication

Unity’s networking implements simple built-in authentication features which provide basic support for validating sessions, but is not a robust authentication solution.

Robust authentication can be an important factor in developing a multiplayer project, as it helps to prevent malicious users from hijacking player sessions, impersonating other users, disconnecting legitimate players from games, or other malicious actions specific to your game or app.

Because Unity only provides simple built-in authentication, if you require robust protection against malicious actions in your game or app, you should use 3rd party authentication and encryption solutions, or implement them yourself using plugins such as this reference implementation and the NetworkTransport API.

Sample Projects

You can also dig into our multiplayer sample projects to see how these features are used together. The following sample projects can be found within this Unity Forum post:

  • Multiplayer 2D Tanks example game
  • Multiplayer Invaders game with Matchmaking
  • Multiplayer 2D space shooter with Matchmaking
  • Minimal Multiplayer project
Multiplayer and Networking
Setting up a multiplayer project