在多台显示器上显示不同的场景?
不,你不能。
在多台显示器上显示来自同一场景的不同摄像机?
是的! 使用 Display 类。
事实上,您不能同时运行两个不同的场景。你不能。
但是,您可以使用Application.LoadLevelAdditive(已过时)或SceneManager.LoadScene("sceneName",LoadSceneMode.Additive); 来扩展当前场景,这与您的要求无关。
你可以做什么:
在相同场景中的不同位置放置多个摄像头,然后将每个摄像头渲染到不同的显示器。
支持的最大显示为 8。
您可以使用Display.displays.Length 查看连接的显示器数量。
Display.displays[0] 是主/主要显示。
Display.displays[1] 下一个显示
Display.displays[2] 下一个显示
Display.displays[3]另一个下一个显示
调用Activate函数来激活显示。
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....");
}