Skip to content

Multiplayer Networking

Dojo's core feature includes networking, allowing any game developed with Dojo to be multiplayer over the Internet by default. This setup enables players and AI agents to access the game from anywhere in the world, greatly enhancing the research's accessibility and encouraging collaborations with individuals beyond the research lab.

Game Networking

Two packages, Nakama and Unity netcode, enable multiplayer networking in the game. Nakama manages the connection between Unity instances, providing each with a unique identity and allowing them to discover and join the same match for interaction. Meanwhile, Unity netcode builds on top of Nakama as a transport layer, facilitating game state synchronization and ensuring fair gameplay across all clients.

Networking Model

By default, Dojo utilizes a server-client networking model to facilitate easy game synchronization. This model involves a single server and one or more clients per game. Whenever a client initiates an action, it transmits its command to the server, which then determines the order in which the actions are executed and updates the game state accordingly. Finally, the server broadcasts the latest game state to all clients, ensuring that each client observes the exact same game state.

For Dojo, both the server and client connect to the same Nakama server to transport their messages. Although they have different roles in Dojo, they are both clients of the Nakama server.

Server-Client

Match

Nakama offers a robust match-making system that enables users to join independent games and communicate with one another in real-time. This functionality can be likened to a virtual room where players can meet and interact. By leveraging the match system, Dojo is capable of hosting numerous games simultaneously using just a single Nakama server. Players can easily join any game by simply following the corresponding match ID.

Identity

Each Unity instance acts as a client to the Nakama server, and upon initial connection, it receives a unique identity from Nakama. This identity is used to track and identify instances within the same game. While Nakama prefers to maintain the persistent identity of each Unity instance, Dojo does not follow this approach. Instead, we have implemented code to automatically delete identity information when an instance disconnects, effectively avoiding this feature.

Role

Dojo facilitates effortless development of human-AI multiplayer games by assigning a unique abstract identity to each Unity instance in the game. The network roles available in the game include:

  • Server
  • Player
  • Viewer

The Server instance is the primary instance that hosts a Nakama match. This authoritative instance enables other clients to discover and join the same match, allowing them to start playing the game. Only one Server instance is necessary per match.

On the other hand, a Player instance is the human client that acts as the player in the game, while a Viewer instance is the human client that can only observe the game without the ability to affect game states. The primary difference between a Player and a Viewer is that a Player has the ability to interact with the game and change game states.

Configuration

Dojo offers game-specific configurations in addition to network roles. These configurations allow developers to define the game tag, ensuring that clients only connect to servers running the same game. Additionally, developers can set a maximum number of players for the game, which is useful for developing single-player games like Tetris. While there is no limit to the number of viewers for any game, the maximum number of allowed players is enforced.

AI Networking

Nakama has a unique design that facilitates effortless connection to currently operational AI policy programs. Unity ml-agents enables AI networking. Usually, the AI players run on a Server instance, while the Algorithms created AI policy programs operate on the same machine as the Server instance.

Human-AI Connection

Unity netcode manages the interaction between humans and AI in the game, while the Nakama layer enables human clients to send customized messages to the AI. When a Viewer instance initiates human feedback, the message is sent to the server with the agent ID, which is then transported through Unity ml-agents to the running policy on the Algorithms side.