Unity3D:在多台监视器上显示不同的场景

sil*_*der 3 c# multiple-monitors unity-game-engine scene display

Unity3D在最新版本中具有本机多监视器支持。API文档建议这样做与将每个显示器连接到摄像机视图有关。可以将显示映射到场景吗?这样,拥有两个监视器的用户可以在一个监视器上显示两个不同的场景?如果可能的话,该怎么做?

Pro*_*mer 5

在多台显示器上显示不同的场景?

,你不能。

在多台监视器上显示来自同一场景的不同摄像机?

是! Display类。

事实是您不能同时运行两个不同的场景。你不能。

但是,您可以使用Application.LoadLevelAdditive(作废)或SceneManager.LoadScene("sceneName",LoadSceneMode.Additive);扩展当前场景,而这与您要的内容无关。

你可以做什么:

将多个摄像机放置在同一场景中的不同位置,然后将每个摄像机渲染到不同的显示。

支持的最大显示为8

您可以Display.displays.Length用来检查连接的人机界面数量。

Display.displays[0] 是主要/主要显示。

Display.displays[1] 下一个显示

Display.displays[2] 下一个显示

Display.displays[3] 另一个下一个显示

调用激活功能以激活显示。

Display.displays[1].Activate();
Run Code Online (Sandbox Code Playgroud)

激活显示时,您还可以提供宽度,高度和刷新率。(仅适用于Windows

int width, height, refreshRate;
width = Screen.width;
height = Screen.height;
refreshRate = 120;
Display.displays[1].Activate(width, height, refreshRate);
Run Code Online (Sandbox Code Playgroud)

在激活显示之前,请确保将显示索引设置为摄像机。

MyOtherCamera.targetDisplay = 1;//使MyOtherCamera显示在第二个显示器上。您现在可以调用激活功能。

假设我们有4个摄像机和4个显示器,并且我们希望将每个摄像机显示到每个显示器。

Camera[] myCams = new Camera[4];
void Start()
{
    //Get Main Camera
    myCams[0] = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();

    //Find All other Cameras
    myCams[1] = GameObject.Find("Camera2").GetComponent<Camera>();
    myCams[2] = GameObject.Find("Camera3").GetComponent<Camera>();
    myCams[3] = GameObject.Find("Camera4").GetComponent<Camera>();

    //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....");
}
Run Code Online (Sandbox Code Playgroud)