Version: 2019.2
PC, Mac & Linux Standalone build settings
macOS

Multi-display

Multi-display allows you to display up to 8 different camera views of your application on up to 8 different monitors at the same time. You could use this for PC games, arcade game machines and simple installations for public display.

Multi-display only runs in standalone mode, and is supported on Windows, Mac OS X and Linux.

Previewing Multi-display in your project

To see the different monitor displays:

Set each CameraA component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info
See in Glossary
to display to a specific monitor, using its InspectorA Unity window that displays information about the currently selected GameObject, Asset or Project Settings, alowing you to inspect and edit the values. More info
See in Glossary
. You can assign between 1 and 8 display monitors via the Target Display option (see Fig. 1).

Fig. 1: Camera Inspector with Target Display option
Fig. 1: Camera Inspector with Target Display option

You can then preview each display in the Game View, using the drop-down Display menu in the top left-hand corner of the view (see Fig. 2).

Fig 2: Display preview in the top left corner of the Game View
Fig 2: Display preview in the top left corner of the Game View

Activating Multi-display

The default display is one monitor, so when you run your application, you need to explicitly activate any additional displays via scripting, using Display.Activate. You need to explicitly activate each additional display and, once activated, you cannot deactivate them.

The best time to activate additional displays is upon creating a new SceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary
. A good way to do this is to attach a script component to the default Camera. Make sure you call Display.Activate only once during the startup. You may find it helpful to create a small initial scene to test it.

Example script

using UnityEngine;
using System.Collections;

public class DisplayScript : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {
        Debug.Log("displays connected: " + Display.displays.Length);
        // Display.displays[0] is the primary, default display and is always ON.
        // Check if additional displays are available and activate each.
        if (Display.displays.Length > 1)
            Display.displays[1].Activate();
        if (Display.displays.Length > 2)
            Display.displays[2].Activate();
        ...
    }
    // Update is called once per frame
    void Update()
    {

    }
}

API support

The following UnityEngine.Display API functions are supported:

    public void Activate()

This activates a specific display on the current monitor’s width and height. This call must be made once upon starting a new Scene. It can be called from a user script attached to a Camera or dummy GameObjectThe fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info
See in Glossary
in a new scene.

public void Activate(int width, int height, int refreshRate)

Windows only: This activates a specific display on a custom monitor’s width and height.

Controlling monitor display positions

By default, your user’s computer sorts the relative positions of its display monitors based on its X, Y virtual desktop. To override this so that your application displays without any sorting, start your application from the command line and use the command line flag:

-multidisplay

PC, Mac & Linux Standalone build settings
macOS