Unity3D: Displaying different scenes on multiple monitors

前端 未结 3 1719
旧时难觅i
旧时难觅i 2021-01-06 06:26

Unity3D has native multimonitor support in recent versions. The API documentation suggests that this is tied to connecting each display to a camera view. Is it possible to,

3条回答
  •  半阙折子戏
    2021-01-06 06:53

    Display different scenes on multiple monitors?

    No, you can't.

    Display different cameras from the-same scene on multiple monitors?

    Yes! with the Display class.

    The fact is that you cannot run two different scenes at the-same time. You cannot.

    However, you can use Application.LoadLevelAdditive (obsolete) or SceneManager.LoadScene("sceneName",LoadSceneMode.Additive); to extend the current scene which has nothing to do with what you are asking.

    What you can do:

    Position multiple cameras in different places in the-same scene then render each camera to different display.

    The max supported display is 8.

    You can use Display.displays.Length to check the amount Displays connected.

    Display.displays[0] is the main/primary display.

    Display.displays[1] Next display

    Display.displays[2] Next display

    Display.displays[3] Another Next display

    Call the Activate function to activate the display.

    Display.displays[1].Activate();
    

    When activating the display, you can also provide the width, height and refresh rate. (For Windows only)

    int width, height, refreshRate;
    width = Screen.width;
    height = Screen.height;
    refreshRate = 120;
    Display.displays[1].Activate(width, height, refreshRate);
    

    Before you activate the display, make sure to set the display index to a camera.

    MyOtherCamera.targetDisplay = 1; //Make MyOtherCamera to display on the second display. You can now call the Activate function.

    Let's say we have 4 cameras and 4 displays and we want to display each camera to each display.

    Camera[] myCams = new Camera[4];
    void Start()
    {
        //Get Main Camera
        myCams[0] = GameObject.FindGameObjectWithTag("MainCamera").GetComponent();
    
        //Find All other Cameras
        myCams[1] = GameObject.Find("Camera2").GetComponent();
        myCams[2] = GameObject.Find("Camera3").GetComponent();
        myCams[3] = GameObject.Find("Camera4").GetComponent();
    
        //Call function when new display is connected
        Display.onDisplaysUpdated += OnDisplaysUpdated;
    
        //Map each Camera to a Display
        mapCameraToDisplay();
    }
    
    void mapCameraToDisplay()
    {
        //Loop over Connected Displays
        for (int i = 0; i < Display.displays.Length; i++)
        {
            myCams[i].targetDisplay = i; //Set the Display in which to render the camera to
            Display.displays[i].Activate(); //Enable the display
        }
    }
    
    void OnDisplaysUpdated()
    {
        Debug.Log("New Display Connected. Show Display Option Menu....");
    }
    

提交回复
热议问题