2016-09-21 172 views
1

Unity3D在最新版本中具有本地多顯示器支持。 API文檔表明,這與將每個顯示器連接到相機視圖相關聯。 是否有可能將顯示映射到場景?因此,具有兩個監視器的用戶可以在其中一個監視器上顯示兩個不同的場景? 如果可能的話,會怎麼做呢?Unity3D:在多個顯示器上顯示不同的場景

+0

你想在同一時間顯示這兩個場景或一次只顯示一個? – Programmer

+0

與此同時。我特別感興趣的是嘗試編寫Kerbal Space Program的Mod,以使用新的Unity多監視器支持,允許用戶在主屏幕上顯示飛行視圖時,在輔助屏幕上顯示mapview或IVA視圖。 – silentcoder

回答

3

在多臺顯示器上顯示不同的場景?

,你不能。

在多臺顯示器上顯示來自同一場景的不同攝像機?

是的!Display類。

事實是,你不能同時運行兩個不同的場景。你不能。

但是,您可以使用Application.LoadLevelAdditive(作廢)或SceneManager.LoadScene("sceneName",LoadSceneMode.Additive);擴展當前場景,這與您要求的內容無關。

你可以做什麼:

位置多臺攝像機在不同的地方在的,相同的場景然後渲染每個攝像機不同的顯示。

最大支持的顯示器是。

您可以使用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...."); 
} 
+0

是否可以使用連接到相機對象的相機組件中的目標顯示激活顯示? – Hamid

+1

我真的不明白你的問題,但你必須將顯示號碼分配給相機的目標('Camera.targetDisplay'),然後調用'Display.display [index] .Activate()'使相機的圖像顯示在監控。我在答案中討論了所有這些。 – Programmer

1

相同的解決方案here
多顯示器

多顯示器可以讓你在同一時間最多可顯示多達8個不同的監控8個不同的攝像機視圖您的應用程序。您可以將其用於PC遊戲,街機遊戲機和簡單的公共顯示裝置。

多顯示器只能在獨立模式下運行,並且在Windows,Mac OS X和Linux上受支持。在您的項目

預覽多顯示器要查看不同顯示器顯示:

設置每個攝像頭顯示某個監視器,使用它的督察。您可以通過目標顯示選項在1到8個顯示器之間進行分配(參見圖1)。

圖1:相機督察與目標顯示選項
enter image description here
圖1:相機督察與目標顯示選項 然後,您可以預覽在遊戲中查看每個顯示,使用下拉顯示菜單該視圖的左上角(見圖2)。

圖2:在遊戲顯示的左上角顯示預覽
enter image description here
圖2:在遊戲顯示的左上角顯示預覽 激活多顯示器

默認顯示是一個監視器,因此當您運行應用程序時,您需要使用Display.Activate通過腳本顯式激活任何其他顯示。您需要明確激活每個附加顯示,並且一旦激活,您就不能停用它們。

激活附加顯示的最佳時間是在創建新場景時。這樣做的一個好方法是將腳本組件添加到默認Camera。確保在啓動期間只調用一次Display.Activate。您可能會發現創建一個小的初始場景來測試它會很有幫助。

例腳本

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支持

以下UnityEngine.Display API函數的支持:

public void Activate() 

這激活所述電流監控器的寬度和高度的特定顯示。在開始新場景時必須進行一次該調用。它可以從連接到相機的用戶腳本或新場景中的虛擬遊戲對象中調用。

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

僅限Windows:激活自定義顯示器的寬度和高度的特定顯示。

1

除了其他答案,如果您確實想在另一臺顯示器上顯示不同場景,則可以確保該場景中的所有內容都位於特定圖層上。然後在該場景中的相機上設置cullingmask僅渲染該圖層,並在主攝像機上排除該圖層。 然後就像上面提到的那樣加載場景。

這基本上是Unity的預覽器的工作原理(儘管它不是實例化隱藏的預製件的場景)。

相關問題