Wie richte ich eine Szene für zwei Spieler ein?

7

Ich beende ein Spiel in Unity, aber ich habe eine neue Anforderung: Mach es im Mehrspielermodus. Ich werde dies tun, indem ich den Bildschirm aufteile und zwei Instanzen ausführe.

Gibt es eine Möglichkeit, eine Szene zweimal gleichzeitig zu instanziieren und zwei Szenen auf einem anderen Teil des Bildschirms zu rendern? Alternativ, was ist der beste Ansatz, um dies zu erreichen?

Matías González
quelle

Antworten:

11

Wenn Sie einen lokalen Multiplayer mit geteiltem Bildschirm erstellen möchten, müssen Sie zwei Kameras verwenden und deren direktes Ansichtsfenster ändern:

https://docs.unity3d.com/ScriptReference/Camera-rect.html

Für vertikal geteilten Bildschirm: (x, y, Breite, Höhe)

  • 1. Kamera: (0, 0, 0,5, 1) ► links
  • 2. Kamera: (0,5, 0, 0,5, 1) ► rechts

VerticalSplitscreen

Für horizontalen geteilten Bildschirm: (x, y, Breite, Höhe)

  • 1. Kamera: (0, 0,5, 1, 0,5) ► oben
  • 2. Kamera: (0, 0, 1, 0,5) ► unten

HorizontalSplitscreen


Keine Notwendigkeit, zwei Welten zu haben. Wenn Sie jedoch möchten, dass die Spieler eine eigene Benutzeroberfläche haben, müssen Sie sich die Culling-Masken ansehen

https://docs.unity3d.com/ScriptReference/Camera-cullingMask.html

Platziere alle Objekte von Spieler 1 in einer neuen Ebene ("Player1Layer"), alle Objekte von Spieler 2 in einer anderen ("Player2Layer") und stelle sicher, dass auf der Kamera von Player 1 nicht "Player2Layer" aktiviert ist Culling-Maske, während in der Kamera des Players 2 "Player1Layer" nicht in der Culling-Maske aktiviert ist.

WICHTIGE NOTIZ

Es scheint, dass eine zusätzliche Konfiguration erforderlich ist, um die GUI einem bestimmten Spieler anzuzeigen. Ich weiß nicht wirklich warum.

Jeder Spieler muss seine eigenen haben:

  1. Hauptkamera mit:

    • Richtiges Ansichtsfenster richtig
    • Ein DepthWert, der auf 0 gesetzt ist
    • Eine Keulungsmaske Everything, außer Player1LayerundPlayer2Layer
  2. Eine zweite Kamera mit:

    • Richtiges Ansichtsfenster richtig
    • Ein DepthWert, der auf 1 gesetzt ist
    • Eine Keulungsmaske für Player1Layer(oder Player2Layerfür den 2. Spieler)
  3. Eine dedizierte Leinwand mit:

    • Rendermodus auf Bildschirmbereich - Kamera eingestellt
    • Die richtige Kamera in # 2 konfiguriert

Befestigen Sie der Einfachheit halber die beiden Kameras eines bestimmten Players an einem eindeutigen übergeordneten Element und bewegen Sie das übergeordnete Element so, dass die beiden Kameras folgen. Vielleicht können Sie die Kameras Nr. 2 auf (0, 0, 0) halten. Ich habe nicht getestet.

Hellium
quelle
Bisher konnte ich das unten beschriebene Problem "Wichtiger Hinweis" nicht replizieren. In meinem Test mit nur zwei Kameras und zwei Leinwänden, die jeweils auf "Bildschirmbereich - Kamera" eingestellt und der entsprechenden Renderkamera zugeordnet sind, wird die Benutzeroberfläche jedes Spielers in der Hälfte des Bildschirms korrekt angezeigt. Können Sie erläutern, welche Umstände oder Probleme eine zusätzliche Kamera pro Spieler erfordern?
DMGregory
Eine zusätzliche Kamera wird benötigt, da beim Testen 3D-Objekte vor der Benutzeroberfläche gerendert wurden, als die Kamera auf Bildschirmbereich - Kamera eingestellt war. (Dieses Problem macht keinen Sinn, da wir uns im Bildschirmbereich befinden )
Hellium
Haben Sie versucht, den Ebenenabstand auf der Leinwand anzupassen? Dadurch kann ich meine Benutzeroberfläche ohne zusätzliche Kamera vor die Objekte ziehen.
DMGregory
Ja, aber 3D-Objekte werden möglicherweise immer noch vor Ihrer Benutzeroberfläche gerendert. Wie auch immer, wenn meine Lösung Ihren Anforderungen entspricht, ist sie perfekt! : D
Hellium