Unity3D unterstützt in den letzten Versionen native Multimonitor-Unterstützung. Die API-Dokumentation legt nahe, dass dies damit verbunden ist, jedes Display mit einer Kameraansicht zu verbinden. Ist es möglich, stattdessen eine Anzeige einer Szene zuzuordnen? Damit ein Benutzer mit zwei Monitoren zwei verschiedene Szenen auf einem der Monitore anzeigen kann? Wenn es möglich ist, wie würde man dies tun?Unity3D: Anzeigen verschiedener Szenen auf mehreren Monitoren
Antwort
Verschiedene Szenen auf mehreren Monitoren anzeigen?
Nein, können Sie nicht.
Anzeigen verschiedener Kameras aus der gleichen Szene auf mehreren Monitoren?
Ja! mit der Display Klasse.
Tatsache ist, dass Sie nicht zwei verschiedene Szenen gleichzeitig ausführen können. Du kannst nicht.
Sie können jedoch Application.LoadLevelAdditive
(veraltet) oder SceneManager.LoadScene("sceneName",LoadSceneMode.Additive);
verwenden, um die aktuelle Szene zu erweitern, die nichts mit dem zu tun hat, was Sie fragen.
Was Sie tun können:
Position mehrere Kameras an verschiedenen Orten in die-gleiche Szene dann jede Kamera an verschiedene Display machen.
Das maximal unterstützte Display ist .
Sie können Display.displays.Length
verwenden, um die Anzahl der angeschlossenen Anzeigen zu überprüfen.
Display.displays[0]
ist die Haupt-/Primäranzeige.
Display.displays[1]
Weiter Anzeige
Display.displays[2]
Nächste Anzeige
Display.displays[3]
Ein weiteres Next Display
Rufen Sie die Funktion aktivieren um die Anzeige zu aktivieren.
Display.displays[1].Activate();
Wenn Sie das Display aktivieren, können Sie auch die Breite, Höhe und Bildwiederholfrequenz angeben. (Für Windows nur)
int width, height, refreshRate;
width = Screen.width;
height = Screen.height;
refreshRate = 120;
Display.displays[1].Activate(width, height, refreshRate);
Bevor Sie das Display aktivieren, stellen Sie sicher, dass die Anzeige Index auf eine Kamera einzustellen.
MyOtherCamera.targetDisplay = 1;
// Lassen Sie MyOtherCamera auf dem zweiten Display anzeigen. Sie können jetzt die Funktion Aktivieren aufrufen.
Nehmen wir an, wir haben 4 Kameras und 4 Displays und möchten jede Kamera für jedes Display anzeigen.
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....");
}
Ist es möglich, Anzeigen über die Zielanzeige in Kamerakomponenten zu aktivieren, die mit dem camer-Objekt verbunden sind? – Hamid
Ich verstehe Ihre Frage wirklich nicht, aber Sie müssen dem Ziel der Kamera eine Anzeigenummer zuweisen ('Camera.targetDisplay') und dann' Display.display [index] .Activate() 'aufrufen, damit das Bild der Kamera auf dem angezeigt wird Monitor. Ich habe das alles in der Antwort besprochen. – Programmer
gleiche Lösung here:
Multi-Display
Multi-Display können Sie auf bis zu 8 verschiedenen Monitoren gleichzeitig zu 8 verschiedenen Kameraansichten Ihrer Anwendung zur Anzeige von bis ermöglicht. Sie können dies für PC-Spiele, Arcade-Spiele-Maschinen und einfache Installationen für die öffentliche Anzeige verwenden.
Multi-Display funktioniert nur im Standalone-Modus und wird unter Windows, Mac OS X und Linux unterstützt.
Previewing Multi-Display in Ihrem Projekt
die verschiedenen Monitoranzeigen zu sehen:
Set jede Kamera auf einen bestimmten Monitor angezeigt werden, dessen Inspektoren. Über die Option Zielanzeige können Sie zwischen 1 und 8 Monitore zuordnen (siehe Abb. 1).
Abb. 1: Kamera-Inspektor mit Zielanzeigeoption
Abb. 1: Kamera-Inspektor mit Zielanzeigeoption Sie können dann im Spiel Ansicht jedes Display eine Vorschau über das Drop-Down-Menü Anzeige in die obere linke Ecke der Ansicht (siehe Abb. 2).
Bild 2: Display-Vorschau in der oberen linken Ecke des Spiels anzeigen
Bild 2: Display-Vorschau in der oberen linken Ecke des Spiels anzeigen aktivieren Multi-Display
Die Standardanzeige Da es sich um einen Monitor handelt, müssen Sie beim Ausführen Ihrer Anwendung alle zusätzlichen Anzeigen mithilfe von Display.Activate explizit per Skript aktivieren. Sie müssen jede zusätzliche Anzeige explizit aktivieren und nach dem Aktivieren können Sie sie nicht mehr deaktivieren.
Die beste Zeit zum Aktivieren zusätzlicher Anzeigen ist beim Erstellen einer neuen Szene. Ein guter Weg, dies zu tun, ist eine Skriptkomponente an die Standard-Kamera anzuhängen. Stellen Sie sicher, dass Sie Display.Activate nur einmal während des Starts aufrufen. Es kann hilfreich sein, eine kleine Anfangsszene zu erstellen, um sie zu testen.
Beispiel Skript
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-Unterstützung
Folgende UnityEngine.Display API-Funktionen unterstützt:
public void Activate()
Dies aktiviert eine spezifische Anzeige auf der Breite des Strommonitor und Höhe . Dieser Aufruf muss einmal beim Starten einer neuen Szene erfolgen. Es kann von einem Benutzerskript aufgerufen werden, das an eine Kamera oder ein Dummy-GameObject in einer neuen Szene angehängt ist.
public void Activate(int width, int height, int refreshRate)
Nur Windows: Dies aktiviert eine bestimmte Anzeige auf der Breite und Höhe eines benutzerdefinierten Monitors.
Zusätzlich zu den anderen Antworten, wenn Sie wirklich eine andere Szene auf einem anderen Monitor anzeigen möchten, können Sie sicherstellen, dass alles in diesen Szenen auf einer bestimmten Ebene ist. Stellen Sie dann in der Kamera in dieser Szene die Cullingmaske so ein, dass nur diese Ebene gerendert wird, und schließen Sie diese Schicht auf Ihrer Hauptkamera aus. Dann laden Sie die Szene additiv wie bereits erwähnt.
Dies ist im Grunde, wie Unity Vorschau auch funktioniert (obwohl anstelle einer Szene ein verstecktes Prefab instanziiert).
- 1. Arbeiten mit vim auf mehreren Monitoren
- 2. OpenCV Vollbild Windows auf mehreren Monitoren
- 3. Delphi 7: Zentrale Formularposition auf mehreren Monitoren
- 4. Anzeigen verschiedener Grafiken in mehreren OpenGL-Fenstern
- 5. Unity3D - Gear VR-Eingang funktioniert nicht zwischen den Szenen
- 6. Ausführen von VNC Vollbild mit mehreren Monitoren
- 7. Maximieren randlosen Formular mit mehreren Monitoren C#
- 8. Öffnen mehrerer Unity-Apps in mehreren Monitoren
- 9. Kann Javafx-Anwendung verschiedene Stufen auf verschiedenen Monitoren anzeigen?
- 10. Steuere Unity3d-Szenen mit Android-Studio-Taste (Intents)
- 11. BigCommerce Anzeigen verschiedener Bilder basierend auf SKU
- 12. Anzeigen verschiedener Zahlen auf 7 Segment
- 13. Unterschiedliche Anzeige auf großen Monitoren
- 14. Google Anzeigen verschiedener Website-Cache
- 15. Wie können Sie mehrere vr-Szenen auf einer Seite anzeigen?
- 16. JavaFX Display Anwendungen auf zwei Monitoren Vollbild
- 17. IDE-Platzierung auf zwei Monitoren
- 18. iOS SpriteKit Szenen - Mehrere Szenen Auf dem Bildschirm
- 19. Kommunikation zu mehreren Kafka-Clustern verschiedener Versionen
- 20. Anzeigen verschiedener Datensätze in derselben UITableView basierend auf den Bedingungen
- 21. Anzeigen von Bildern verschiedener unbekannter Dimensionen konsistent
- 22. Anzeigen verschiedener Dokumenttypen in Kibana von ElasticSearch
- 23. wpf documentviewer zum Anzeigen verschiedener Dateiformate?
- 24. Interstitial in anderen Szenen anzeigen - Admob, SpriteKit, Swift
- 25. Verwendung von Orbit Controls mit mehreren überlappenden Szenen in Three.js
- 26. Wie man verschiedene Fenster in verschiedenen Monitoren mit OpenCV anzeigt
- 27. Wie man JavaFX Menüeintrag mit mehreren Szenen verwendet
- 28. Muss ich meine Website auf verschiedenen Monitoren testen?
- 29. Ausgabe auf mehreren Zeilen in Arraylist anzeigen
- 30. Spieler Bewegung auf Unity3d
Und Sie möchten diese zwei Szenen zur gleichen Zeit oder nur eine nach der anderen zeigen? – Programmer
Zur gleichen Zeit. Mein spezielles Interesse ist es, einen Mod für das Kerbal Space Programm zu schreiben, um die neue Multimonitor-Unterstützung von Unity zu verwenden, damit Benutzer die Kartenansicht oder IVA-Ansichten auf sekundären Bildschirmen anzeigen können, während die Flugansicht auf dem Hauptbildschirm angezeigt wird. – silentcoder