Użyj tekstur renderowania, aby wyświetlić zawartość innej sceny jako tekstury

Strona zaktualizowana :
Data utworzenia strony :

Środowisko weryfikacji

Windows
  • Okna 11
Edytor Unity
  • 2021.3.3f1
Pakiet systemu wejściowego
  • 1.3.0

Wymagania wstępne dotyczące tej porady

Poniższe ustawienia zostały wcześniej wprowadzone jako przesłanka do opisu tej wskazówki.

Na początku

Renderowanie tekstur umożliwia zapisywanie rysunków na teksturze zamiast na ekranie. Pozwala to na swobodne generowanie tekstur podczas wykonywania gry bez wcześniejszego przygotowywania obrazów tekstur.

Możesz także zapisać teksturę renderowania, która zmienia się dynamicznie co klatkę, na przykład, aby wyświetlić inny obraz z głównej kamery na wyświetlaczu, który istnieje w grze.

Przygotowywanie obrazów

W przypadku korzystania z tekstury renderingu nie trzeba przygotowywać obrazu, ale można go przygotować jako próbkę, aby wynik rysunku był łatwiejszy do zrozumienia.

Tworzenie tekstury renderingu

Utwórz zasób z projektu. W obszarze Utwórz wybierz opcję Renderuj teksturę.

Nazwa może być dowolna. Ponieważ nazwa nie jest obecnie określona bezpośrednio z NewRenderTexture zewnątrz, pozostaw jako .

Wybierz teksturę renderingu i określ jej rozmiar w Inspektorze. Ponieważ tekstura renderingu jest obszarem rysunku, należy określić rozmiar. Tym razem chcę napisać scenę tworzoną osobno, więc ustawiam proporcje na 16:9.

Ustawianie miejsca docelowego tekstury renderowania

Wybierz "UI" > "Raw Image" z hierarchii sceny, która jest początkowo tworzona. Wyświetl zawartość tekstury renderingu w tym obiekcie. Jest to obiekt interfejsu użytkownika, ale potrzebny jest komponent "Raw Image", który można ustawić na inny obiekt.

RawImage został umieszczony. Ponieważ jest to obiekt interfejsu użytkownika, jest on umieszczany w kanwie. Jeszcze nic nie ustawiłem, więc dostaję tylko biały prostokąt.

Chcemy, aby skala była równa, dlatego ustawiamy rozmiar obiektu RawImage na taki sam jak tekstura renderowania. Jeśli współczynnik proporcji pozostanie taki sam, wynik rysowania będzie skalowany tylko w przypadku zmiany rozmiaru, ale jeśli zmienisz współczynnik proporcji, wynik rysunku zostanie zmiażdżony w pionie lub poziomie.

Komponent Raw Image obiektu RawImage ma "teksturę", więc ustaw teksturę renderowania, którą właśnie tam utworzyłeś. Zawartość tekstury renderingu jest nadal pusta, więc jest przezroczysta w widoku.

Tworzenie sceny renderowania tekstury zawartości rysunku

Następnie utwórz nową scenę, aby utworzyć zawartość, która ma zostać narysowana w teksturze renderowania. Wybierz Plik z menu i wybierz Nowa scena.

Ponieważ ten przykład jest 2D, wybierzesz również scenę 2D.

Utwórz go w folderze Scena. SampleSceneTexture Pozostaw nazwę jako .

Po utworzeniu sceny odpowiednio rozmieść obiekty. Wszystko, co musisz zrobić, to upewnić się, że znasz zawartość tekstury renderowania. Aby potwierdzić, że wszystko, co wystaje poza kamerę, nie jest rysowane, w pobliżu ramy kamery umieszcza się również duszka.

Jeśli obiekty nakładają się na siebie, kontekst obiektów będzie nieokreślony, więc jeśli masz tło, zmniejsz kolejność warstw tła.

Po wybraniu "MainCamera" ustaw teksturę renderowania w "Tekstura docelowa". Powoduje to rysowanie rysunku w teksturze renderingu.

Usuń składnik Audio Listener ustawiony na MainCamera. Wszystko, czego potrzebujesz do tekstury renderowania, to rysowanie, więc nie potrzebujesz Audio Listener. Ostrzeżenie zostanie wyświetlone, jeśli w czasie wykonywania jest wiele "odbiorników audio".

Nawiasem mówiąc, jeśli uruchomisz scenę dla tekstury renderowania w tym stanie, nic nie zostanie wyświetlone na ekranie. Dzieje się tak, ponieważ rysujesz na teksturze renderowania. Jeśli chcesz to sprawdzić na ekranie, usuń "teksturę docelową", a następnie wykonaj ją.

Ustawienia warstwy

W tym przykładzie konieczne będzie przeniesienie dwóch scen w tym samym czasie, ale jeśli zostaną przeniesione w niezmienionej postaci, zawartość do narysowania w teksturze renderingu będzie również wyświetlana na ekranie głównym, więc warstwy nie będą rysowane osobno.

Najpierw wybierz "Edytuj warstwę" z warstwy w prawym górnym rogu edytora.

Nazwa i lokalizacja są dowolne, ale tutaj dodamy nową RenderTarget warstwę o nazwie .

Po dodaniu warstwy otwórz scenę tekstury renderowania, zaznacz wszystkie obiekty, które chcesz narysować, i zmień wartość warstwy na właśnie utworzoną RenderTarget .

SampleSceneTexture Spowoduje to zakończenie edycji sceny, więc zapisz ją.

Wyświetlanie tekstur renderowania

SampleScene Po otwarciu sceny dodaj ją do hierarchii SampleSceneTexture , przeciągając ją i upuszczając. Następnie w hierarchii powinny znajdować się dwie sceny, a zawartość sceny powinna być wyświetlana na SampleSceneTexture ekranie.

SampleSceneTexture Zawartość sceny jest niepokojąca, więc kliknij ikonę oka sceny z hierarchii SampleSceneTexture . SampleSceneTexture Spowoduje to ukrycie obiektów w scenie i widoczna będzie tylko zawartość sceny SampleScene . Nawiasem mówiąc, ponieważ wszystkie ustawienia tekstury renderowania zostały zakończone,SampleScene zawartość tekstury renderowania powinna być wyświetlana na surowym obrazie umieszczonym w scenie.

Jednak ukrycie przez oko ikony jest tylko ustawieniem, aby była niewidoczna w edytorze, więc jeśli uruchomisz SampleSceneTexture grę taką, jaka jest, zawartość sceny zostanie również wyświetlona na ekranie. SampleScene Następnie wybierz opcję Scena Main Camera i usuń zaznaczenie opcji Z RenderTarget maski usuwania w Inspektorze.Camera Zapobiega to wyświetlaniu obiektów w warstwie podczas RenderTarget działania gry.

Spróbuj uruchomić grę. Powinien wyglądać zgodnie z przeznaczeniem.

Spróbuj przenieść teksturę renderowania

Jednak w tym stanie trudno jest stwierdzić, czy naprawdę działa jako tekstura renderowania, czy po prostu wyświetla obraz jako kadrowanie, więc przenieśmy go.

Treść może być dowolna, ale tutaj ustawimy ruch, aby automatycznie obracał duszka. SelfRotate Utwórz skrypt i utwórz go jako .

Tutaj uwzględnimy prosty proces obracania się krok po kroku.

using UnityEngine;

public class SelfRotate : MonoBehaviour
{
  // 更新はフレームごとに 1 回呼び出されます
  void Update()
  {
    transform.Rotate(0, 0, 0.1f);
  }
}

Po utworzeniu skryptu dołączaj coraz więcej do obiektu, który chcesz obrócić.

Następnie uruchom grę i sprawdź, czy się kręci. Myślę, że widać, że obiekt porusza się w teksturze renderingu.

Jak przenieść wiele scen jednocześnie

Tutaj stworzyliśmy prosty przykład, dzięki czemu mamy dwie sceny biegnące od początku, ale w prawdziwej grze jest wiele przypadków, w których trzeba zacząć od jednej sceny. W takim przypadku myślę, że będziesz musiał dynamicznie dodawać sceny na początku sceny, aby było wiele scen.

Zapoznaj się z częścią "Dodawanie sceny", aby dowiedzieć się, jak dodać scenę. Zasadniczo SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); dzwonienie powinno rozwiązać większość problemów.

Jak zapobiec wyświetlaniu zawartości tekstury renderingu na ekranie głównym bez użycia warstw

Zawartość tekstury renderingu jest wyświetlana na ekranie głównym, ponieważ scena główna i scena tekstury renderowania znajdują się w tym samym miejscu. Dlatego jeśli zawartość tekstury renderowania zostanie przeniesiona w miejsce, które nigdy nie jest wyświetlane w scenie głównej, nie będzie ona wyświetlana na ekranie głównym. Można na przykład przenieść obiekt tekstury renderowania lub kamerę do lokalizacji (-10000, -10000). W ten sposób ustawienia warstw nie są konieczne.

Aby uzupełnić zawartość tekstury renderingu w jednej scenie bez dzielenia jej na różne sceny

Odbywa się to przy użyciu tej samej techniki, co poprzednia metoda bez warstw. Zawartość wyświetlaną przez teksturę renderowania można przenieść w miejsce, w którym nigdy nie będzie wyświetlana na kamerze głównej. Różnica w stosunku do metody rozdzielania scen polega na tym, że musisz umieścić dwie kamery, ale poza tym będziesz miał zasadniczo takie same ustawienia, jak metoda separacji scen.

Jeśli chcesz przechwycić zawartość przechwyconą z innej perspektywy w grze 3D jako teksturę renderowania

Ta wskazówka nie mówiła wiele o 3D, ponieważ skupiała się na 2D, ale podejście jest w zasadzie takie samo. Ponieważ wyświetlasz pojedynczą przestrzeń 3D z wielu perspektyw, nie musisz mieć więcej niż dwóch scen. Wszystko, co musisz zrobić, to umieścić tyle kamer, ile potrzebujesz, ustawić miejsce docelowe rysunku jako teksturę renderowania i ustawić miejsce wyświetlania tekstury renderowania.