Verwenden Sie Rendertexturen, um den Inhalt einer anderen Szene als Texturen anzuzeigen
Verifizierungsumgebung
- Fenster
-
- Windows 11
- Unity-Editor
-
- 2021.3.3f1
- Eingabesystem-Paket
-
- 1.3.0
Voraussetzungen für diesen Tipp
Die folgenden Einstellungen wurden im Vorfeld als Prämisse für die Beschreibung dieses Tipps vorgenommen.
Zuerst
Mit Rendertexturen können Sie Ihre Zeichnungen in eine Textur statt auf den Bildschirm schreiben. Auf diese Weise können Sie Texturen während der Spielausführung frei generieren, ohne Texturbilder im Voraus vorbereiten zu müssen.
Sie können auch in eine Rendertextur schreiben, die sich bei jedem Frame dynamisch ändert, z. B. um ein anderes Bild von der Hauptkamera auf ein im Spiel vorhandenes Display zu projizieren.
Vorbereiten von Bildern
Wenn Sie eine Rendertextur verwenden, müssen Sie kein Bild vorbereiten, aber Sie können es als Beispiel vorbereiten, um das Zeichnungsergebnis leichter verständlich zu machen.
Erstellen einer Rendertextur
Erstellen Sie ein Asset aus dem Projekt. Wählen Sie unter Erstellen die Option Textur rendern aus.
Der Name kann beliebig sein. Da der Name zu diesem Zeitpunkt nicht direkt von außen NewRenderTexture
angegeben wird, lassen Sie es als .
Wählen Sie die Rendertextur aus und geben Sie ihre Größe im Bereich "Informationen" an. Da es sich bei der Rendertextur um einen Zeichenbereich handelt, müssen Sie eine Größe angeben. Dieses Mal möchte ich eine separat erstellte Szene schreiben, also habe ich das Seitenverhältnis auf 16:9 eingestellt.
Festlegen des Ziels für die Rendertextur
Wählen Sie "UI" > "Raw Image" aus der Hierarchie der Szene, die ursprünglich erstellt wird. Zeigen Sie den Inhalt der Rendertextur in diesem Objekt an. Es ist ein Objekt der Benutzeroberfläche, aber was Sie brauchen, ist eine "Raw Image"-Komponente, die auf ein anderes Objekt eingestellt werden kann.
Das RawImage wurde platziert. Da es sich um ein UI-Objekt handelt, wird es in einem Canvas-Bereich platziert. Ich habe noch nichts eingestellt, also bekomme ich nur ein weißes Rechteck.
Wir möchten, dass die Skalierung gleich ist, daher legen wir die Größe des RawImage-Objekts so fest, dass sie mit der Rendertextur übereinstimmt. Wenn Sie das Seitenverhältnis beibehalten, wird das Zeichnungsergebnis nur skaliert, auch wenn Sie die Größe ändern, aber wenn Sie das Seitenverhältnis ändern, wird das Zeichnungsergebnis vertikal oder horizontal zerkleinert.
Die Raw-Image-Komponente des RawImage-Objekts hat eine "Textur", also legen Sie dort die gerade erstellte Rendertextur fest. Der Inhalt der Rendertextur ist noch leer, sodass er in der Ansicht transparent ist.
Erstellen einer Szene mit dem Inhalt der Rendertexturzeichnung
Erstellen Sie als Nächstes eine neue Szene, um den Inhalt zu erstellen, der in der Rendertextur gezeichnet werden soll. Wählen Sie im Menü "Datei" und dann "Neue Szene" aus.
Da es sich bei diesem Beispiel um eine 2D-Szene handelt, wählen Sie auch eine 2D-Szene aus.
Erstellen Sie es im Ordner "Szene". SampleSceneTexture
Lassen Sie den Namen als .
Nachdem Sie die Szene erstellt haben, platzieren Sie die Objekte entsprechend. Alles, was Sie tun müssen, ist sicherzustellen, dass Sie den Inhalt der Rendertextur kennen. Um sicherzustellen, dass alles, was aus der Kamera herausragt, nicht gezeichnet wird, wird auch ein Sprite in der Nähe des Kamerarahmens platziert.
Wenn sich die Objekte überlappen, ist der Kontext der Objekte unbestimmt, wenn Sie also einen Hintergrund haben, verringern Sie die Reihenfolge der Hintergrundebenen.
Nachdem Sie "MainCamera" ausgewählt haben, legen Sie die Rendertextur unter "Zieltextur" fest. Dadurch wird die Zeichnung in der Rendertextur gezeichnet.
Entfernen Sie die Komponente "Audio Listener", die auf "MainCamera" eingestellt ist. Alles, was Sie für eine Rendertextur benötigen, ist das Zeichnen, sodass Sie Audio Listener nicht benötigen. Eine Warnung wird angezeigt, wenn zur Laufzeit mehrere "Audio-Listener" vorhanden sind.
Übrigens, wenn Sie die Szene für die Rendertextur in diesem Zustand ausführen, wird nichts auf dem Bildschirm angezeigt. Dies liegt daran, dass Sie auf einer Rendertextur zeichnen. Wenn Sie es auf dem Bildschirm überprüfen möchten, löschen Sie die "Zieltextur" und führen Sie sie dann aus.
Layer-Einstellungen
In diesem Beispiel müssen Sie zwei Szenen gleichzeitig verschieben, aber wenn Sie sie so verschieben, wie sie sind, werden die Inhalte, die in der Rendertextur gezeichnet werden sollen, auch auf dem Hauptbildschirm angezeigt, sodass die Ebenen nicht separat gezeichnet werden.
Wählen Sie zunächst "Ebene bearbeiten" aus der Ebene in der oberen rechten Ecke des Editors.
Der Name und der Speicherort sind willkürlich, aber hier fügen wir einen neuen RenderTarget
Layer mit dem Namen hinzu.
Öffnen Sie nach dem Hinzufügen der Ebene die Szene für die Rendertextur, wählen Sie alle Objekte aus, die Sie zeichnen möchten, und ändern Sie den Ebenenwert in den soeben erstellten RenderTarget
.
SampleSceneTexture
Dadurch wird die Bearbeitung der Szene beendet, also speichern Sie sie bitte.
Render-Texturen anzeigen
SampleScene
Nachdem Sie eine Szene geöffnet haben, fügen Sie sie der Hierarchie SampleSceneTexture
hinzu, indem Sie die Szene per Drag & Drop verschieben.
Dann sollte es zwei Szenen in der Hierarchie geben, und der Inhalt der Szene sollte auf dem SampleSceneTexture
Bildschirm angezeigt werden.
SampleSceneTexture
Der Inhalt der Szene ist störend, klicken Sie also in der SampleSceneTexture
Hierarchie auf das Augensymbol der Szene.
SampleSceneTexture
Dadurch werden die Objekte in der Szene ausgeblendet und nur der Inhalt der Szene SampleScene
ist sichtbar.
Übrigens, da alle Einstellungen für die Rendertextur abgeschlossen sind,SampleScene
sollte der Inhalt der Rendertextur in dem in der Szene platzierten Rohbild angezeigt werden.
Das Ausblenden durch das Augensymbol ist jedoch nur eine Einstellung, um es im Editor unsichtbar zu machen, so dass der Inhalt der Szene auch auf dem Bildschirm angezeigt wird, wenn Sie das Spiel so ausführenSampleSceneTexture
, wie es ist.
SampleScene
Wählen Sie dann "Szene" aus und deaktivieren Sie die Camera
Option "Aus RenderTarget
der Culling-Maske" Main Camera
im Inspektor.
Dadurch wird verhindert, dass die Objekte in der Ebene angezeigt werden, wenn RenderTarget
das Spiel ausgeführt wird.
Versuchen Sie, das Spiel auszuführen. Es sollte wie beabsichtigt angezeigt werden.
Versuchen Sie, die Rendertextur zu verschieben
In diesem Zustand ist es jedoch schwierig zu wissen, ob es wirklich als Rendertextur funktioniert oder das Bild einfach als Zuschnitt anzeigt, also verschieben wir es.
Der Inhalt kann alles sein, aber hier stellen wir die Bewegung so ein, dass die Figur automatisch gedreht wird. Erstellen Sie ein SelfRotate
Skript und erstellen Sie es als .
Hier werden wir einen einfachen Prozess einbeziehen, bei dem es sich nach und nach dreht.
using UnityEngine;
public class SelfRotate : MonoBehaviour
{
// 更新はフレームごとに 1 回呼び出されます
void Update()
{
transform.Rotate(0, 0, 0.1f);
}
}
Nachdem Sie das Skript erstellt haben, hängen Sie mehr und mehr an das Objekt an, das Sie drehen möchten.
Führen Sie dann das Spiel aus und sehen Sie, ob es sich dreht. Ich denke, Sie können sehen, dass sich das Objekt in der Rendertextur bewegt.
So verschieben Sie mehrere Szenen gleichzeitig
Hier haben wir ein einfaches Beispiel erstellt, so dass wir von Anfang an zwei Szenen haben, aber in einem echten Spiel gibt es viele Fälle, in denen Sie mit einer einzigen Szene beginnen müssen. In diesem Fall denke ich, dass Sie am Anfang der Szene dynamisch Szenen hinzufügen müssen, um mehrere Szenen zu erstellen.
Unter "Hinzufügen einer Szene" finden Sie eine Erklärung, wie Sie eine Szene hinzufügen.
Grundsätzlich sollte das SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive);
Telefonieren die meisten Probleme lösen.
So verhindern Sie, dass der Inhalt einer Rendertextur auf dem Hauptbildschirm angezeigt wird, ohne Ebenen zu verwenden
Der Inhalt der Rendertextur wird auf dem Hauptbildschirm angezeigt, da sich die Hauptszene und die Rendertexturszene an derselben Stelle befinden. Wenn Sie also den Inhalt der Rendertextur an eine Stelle verschieben, die in der Hauptszene nie angezeigt wird, wird sie nicht auf dem Hauptbildschirm angezeigt. Sie können z. B. ein Rendertexturobjekt oder eine Kamera an die Position (-10000, -10000) verschieben. Auf diese Weise sind Ebeneneinstellungen nicht erforderlich.
Wenn Sie den Inhalt einer Rendertextur in einer Szene vervollständigen möchten, ohne sie in verschiedene Szenen aufzuteilen
Dies geschieht mit der gleichen Technik wie bei der vorherigen Methode ohne Schichten. Sie können den von der Rendertextur angezeigten Inhalt an eine Stelle verschieben, an der er auf der Hauptkamera nie angezeigt wird. Der Unterschied zur Methode zum Trennen von Szenen besteht darin, dass Sie zwei Kameras platzieren müssen, aber ansonsten haben Sie im Grunde die gleichen Einstellungen wie bei der Methode zum Trennen von Szenen.
Wenn Sie Inhalte, die aus einer anderen Perspektive aufgenommen wurden, in einem 3D-Spiel als Rendertextur erfassen möchten
In diesem Tipp wurde nicht viel über 3D gesprochen, da er sich auf 2D konzentrierte, aber der Ansatz ist im Grunde derselbe. Da Sie einen einzelnen 3D-Raum aus mehreren Perspektiven projizieren, benötigen Sie nicht mehr als zwei Szenen. Alles, was Sie tun müssen, ist, so viele Kameras wie nötig zu platzieren, das Zeichnungsziel als Rendertextur festzulegen und festzulegen, wo die Rendertextur angezeigt werden soll.