Wie visualisiere ich Parallaxenebenen in einem Ebeneneditor?


9

Ich mache ein 2D-Spiel in Unity, aber dies würde für jede 2D-Spiel-Engine gelten.

Wenn ich mit orthografischen Kameras eine Parallaxe mit mehreren Ebenen implementiere, ist es schwierig, die Sprites der Hintergrundebene auszulegen und zu wissen, wo sie mit den Sprites in anderen Ebenen ausgerichtet sind.

Mein erster Instinkt war, mehrere Kameras zu verwenden, eine für jede Ebene, und die Bewegungsgeschwindigkeit von Kameras für Hintergrundebenen zu verringern. Dadurch wird vermieden, dass alle Hintergrund-Sprites in jedem Frame verschoben werden müssen. Das Problem ist, dass eine Ebene, die sich mit halber Geschwindigkeit bewegt, die Hälfte des Platzes der Hauptebene einnimmt, wenn sie im Editor angezeigt wird. Daher ist es schwierig zu wissen, wo Sprites platziert werden sollen, wenn Sie das Spiel auslegen. Das Problem wird exponentiell schlimmer, wenn Sie die Anzahl der Ebenen erhöhen.

Wie komme ich darum herum? Ich habe versucht, die Ebenen während der Arbeit mit ihnen im Editor umgekehrt nach ihren beabsichtigten Bewegungsgeschwindigkeiten zu skalieren. Dadurch werden alle Hintergrund-Sprites an den richtigen Stellen relativ zur Hauptebene platziert, aber sie sind schrecklich verzerrt.

Muss ich es einfach aufsaugen und ständig zwischen dem Editor und dem laufenden Spiel wechseln, um die Parallaxenhintergründe zu testen?


4
Als ich so ein Spiel gemacht habe, habe ich es einfach gemacht, damit Sie im Editor um die Kamera ziehen und sehen können, wie die Parallaxe funktioniert. Ich bin mir jedoch nicht sicher, wie ich so etwas in Unity konkret machen soll.
Tetrad

Antworten:


1

Ich bin mit Unity nicht vertraut, daher kann ich Ihnen bei Einzelheiten nicht helfen, aber es scheint, als müssten Sie eine GUI implementieren, um diese Werte zur Laufzeit beispielsweise mit einer Reihe von Schiebereglern oder numerischen Feldern zu optimieren. Es wäre ziemlich einfach, Felder zu implementieren, um die von Ihnen ermittelten Werte (Skalierung, Geschwindigkeit usw.) zur Laufzeit zu ändern, wodurch Sie sofortiges Feedback erhalten. Für die Platzierung können Sie entweder Felder oder die manuelle Platzierung mit Klick-Ziehen verwenden (was möglicherweise etwas schwieriger zu implementieren, aber viel intuitiver ist).

Auf diese Weise haben Sie die vollständige Kontrolle, ohne den Code für jeden kleinen Bruchteil einer Änderung zu kompilieren und auszuführen. Wenn Sie endlich zu einem Look & Feel kommen, mit dem Sie zufrieden sind, verwenden Sie diese Werte in Ihrer Liste der Konstanten. Wenn dies aufgrund der Anzahl der Variablen, die Sie bearbeiten (z. B. zahlreiche Sprite-Speicherorte in zahlreichen Ebenen), zu entmutigend ist, möchten Sie es, wie ich mir vorstellen kann, in einem Ebeneneditor implementieren, mit der gleichen Funktionalität der manuellen Anpassung, jedoch mit dem Ergebnis der Erstellung und Speicherung der Daten angepasst.


Ja, es scheint, dass die Verwendung eines Level-Editors der beste Weg ist, dies zu tun, unabhängig davon, ob Sie Ihren eigenen oder in meinem Fall mit Unity so programmieren, dass er mit dem vorhandenen Editor zusammenarbeitet. Ich habe mein Paralax-Setup mit einem separaten Kameraobjekt für jede Ebene codiert, und die Kameras werden jeweils relativ zur Hauptkamera in jedem Bild entsprechend bewegt. Verwenden Sie dann [ExecuteInEditMode], um sie zu aktualisieren, selbst wenn die Hauptkamera in den Editor gezogen wird. Ich muss nur daran denken, nur die Hauptkamera direkt zu bewegen.
TenFour04

1

Eine Idee: Ich würde denken, eine Kamera für die vordere Schicht ist genug. Wenn Sie Sprites in einem Abstand von dem in der z-Ebene platzieren und den Abstand verringern, erhalten Sie einen Bruchteil, auf dem Sie diese hintere Ebene verschieben können.

Beispielsweise bewegt sich ein Objektabstand 10 von der Frontkamera 1/10 in der Hintergrundebene. Ein Objekt mit Abstand 2 würde sich 1/2 in seiner jeweiligen Schicht usw. bewegen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.