Unity3D:在多台监视器上显示不同的场景 [英] Unity3D: Displaying different scenes on multiple monitors
问题描述
Unity3D在最新版本中具有本机多监视器支持. API文档建议这样做与将每个显示器连接到摄像机视图有关. 可以将显示映射到场景吗?这样,具有两个监视器的用户可以在一个监视器上显示两个不同的场景? 如果可能的话,如何去做呢?
在多台显示器上显示不同的场景?
否,不能.
在多台监视器上显示同一场景中的不同摄像机?
是!和 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();
激活显示时,您还可以提供宽度,高度和刷新率. (仅适用于Windows )
int width, height, refreshRate;
width = Screen.width;
height = Screen.height;
refreshRate = 120;
Display.displays[1].Activate(width, height, refreshRate);
在激活显示之前,请确保将显示索引设置为摄像机.
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....");
}
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, instead, map a display to a scene ? So that a user with two monitors could have two different scenes each displayed on one of the monitors ? If it is possible, how would one go about doing this ?
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<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....");
}
这篇关于Unity3D:在多台监视器上显示不同的场景的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!