Använd renderingstexturer för att visa innehållet i en annan scen som texturer

Sidan uppdaterad :
Datum för skapande av sida :

Verifiering miljö

Windows
  • Fönster 11
Unity-redaktör
  • 2021.3.3F1
Paket för inmatningssystem
  • 1.3.0

Förutsättningar för det här tipset

Följande inställningar har gjorts i förväg som en förutsättning för beskrivningen av detta tips.

Först

Med renderingstexturer kan du skriva dina ritningar till en textur istället för skärmen. Detta gör att du fritt kan generera texturer under spelets utförande utan att förbereda texturbilder i förväg.

Du kan också skriva till en renderingsstruktur som dynamiskt ändrar varje bildruta, till exempel för att projicera en annan bild från huvudkameran på en skärm som finns i spelet.

Förbereda bilder

När du använder en renderingsstruktur behöver du inte förbereda en bild, men du kan förbereda den som ett exempel för att göra ritningsresultatet lättare att förstå.

Skapa en renderingsstruktur

Skapa en tillgång från projektet. Från Skapa väljer du Rendera textur.

Namnet kan vara godtyckligt. Eftersom namnet inte anges direkt från NewRenderTexture utsidan just nu, lämna som .

Markera renderingsstrukturen och ange dess storlek i Granskaren. Eftersom renderingsstrukturen är ett ritområde måste du ange en storlek. Den här gången vill jag skriva en scen som skapats separat, så jag ställer in bildförhållandet till 16: 9.

Ange mål för renderingstextur

Välj "UI" > "Raw Image" från hierarkin för scenen som ursprungligen skapades. Visa innehållet i renderingsstrukturen i det här objektet. Det är ett objekt i användargränssnittet, men vad du behöver är en "Raw Image" -komponent, som kan ställas in på ett annat objekt.

RawImage har placerats. Eftersom det är ett gränssnittsobjekt placeras det på en arbetsyta. Jag har inte ställt in något ännu, så jag får bara en vit rektangel.

Vi vill att skalan ska vara lika med varandra, så vi anger att storleken på RawImage-objektet ska vara densamma som renderingsstrukturen. Om du behåller samma proportioner skalas ritningsresultatet bara även om du ändrar storleken, men om du ändrar proportionerna krossas ritningsresultatet lodrätt eller vågrätt.

Raw Image-komponenten i RawImage-objektet har en "texture", så ange renderingsstrukturen som du just skapade där. Innehållet i renderingsstrukturen är fortfarande tomt, så de är genomskinliga i vyn.

Skapa en scen med renderat texturritningsinnehåll

Skapa sedan en ny scen för att skapa innehållet som ska ritas i renderingsstrukturen. Välj Arkiv på menyn och välj Ny scen.

Eftersom det här exemplet är 2D väljer du också en 2D-scen.

Skapa den i mappen Scen. SampleSceneTexture Lämna namnet som .

När du har skapat scenen placerar du objekten på lämpligt sätt. Allt du behöver göra är att se till att du känner till innehållet i renderingsstrukturen. För att bekräfta att allt som sticker ut utanför kameran inte ritas placeras också en sprite nära kameraramen.

Om objekten överlappar varandra kommer objektens kontext att vara obestämd, så om du har en bakgrund sänker du ordningen på bakgrundslagren.

När du har valt "MainCamera" ställer du in renderingsstrukturen i "Target texture". Detta gör att ritningen ritas i renderingsstrukturen.

Ta bort komponenten Ljudlyssnare inställd på MainCamera. Allt du behöver för en renderingsstruktur är att rita, så du behöver inte Ljudlyssnare. En varning visas om det finns flera "Ljudlyssnare" vid körning.

Förresten, om du kör scenen för renderingsstrukturen i det här tillståndet visas ingenting på skärmen. Det beror på att du ritar på en renderingstextur. Om du vill kontrollera det på skärmen, ta bort "målstrukturen" och kör den sedan.

Inställningar för lager

I det här exemplet måste du flytta två scener samtidigt, men om du flyttar dem som de är visas innehållet som ska ritas i renderingsstrukturen också på huvudskärmen, så lagren ritas inte separat.

Välj först "Redigera lager" från lagret i det övre högra hörnet av redigeraren.

Namnet och platsen är godtyckliga, men här lägger vi till ett nytt RenderTarget lager med namnet .

När du har lagt till lagret öppnar du scenen för renderingsstrukturen, markerar alla objekt som du vill rita och ändrar lagervärdet till det du just skapade RenderTarget .

SampleSceneTexture Detta kommer att avsluta redigeringen av scenen, så spara den.

Visa renderingstexturer

SampleScene När du har öppnat en scen lägger du till den i hierarkin SampleSceneTexture genom att dra och släppa scenen. Sedan ska det finnas två scener i hierarkin och innehållet i scenen ska visas på SampleSceneTexture skärmen.

SampleSceneTexture Scenens innehåll är störande, så klicka på scenens ögonikon från hierarkin SampleSceneTexture . SampleSceneTexture Detta döljer objekten i scenen och endast innehållet i scenen kommer att SampleScene synas. Förresten, eftersom alla inställningar för renderingstextur har slutförtsSampleScene , bör innehållet i renderingsstrukturen visas i den råa bilden som placeras i scenen.

Ikonen för att dölja ögat är dock bara en inställning för att göra den osynlig i redigeraren, så om du kör SampleSceneTexture spelet som det är kommer innehållet i scenen också att visas på skärmen. SampleScene Välj sedan Scen Main Camera och avmarkera Från RenderTarget gallringsmask i granskarenCamera. Detta förhindrar att objekten i lagret visas när RenderTarget spelet körs.

Prova att köra spelet. Det ska se ut som avsett.

Prova att flytta renderingsstrukturen

Men i det här tillståndet är det svårt att veta om det verkligen fungerar som en renderingsstruktur eller helt enkelt visar bilden som en beskärning, så låt oss flytta den.

Innehållet kan vara vad som helst, men här ställer vi in rörelsen för att automatiskt rotera sprite. Skapa ett SelfRotate skript och skapa det som .

Här kommer vi att inkludera en enkel process att rotera sig lite efter lite.

using UnityEngine;

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

När du har skapat skriptet bifogar du mer och mer till objektet du vill rotera.

Kör sedan spelet och se om det snurrar. Jag tror att du kan se att objektet rör sig i renderingsstrukturen.

Så här flyttar du flera scener samtidigt

Här skapade vi ett enkelt exempel så att vi har två scener som löper från början, men i ett riktigt spel finns det många fall där du måste börja med en enda scen. I så fall tror jag att du måste dynamiskt lägga till scener i början av scenen för att göra det till flera scener.

Se "Lägga till en scen" för en förklaring av hur du lägger till en scen. SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); I grund och botten bör samtal lösa de flesta problemen.

Så här förhindrar du att innehållet i en renderingsstruktur visas på huvudskärmen utan att använda lager

Innehållet i renderingsstrukturen visas på huvudskärmen eftersom huvudscenen och renderingstexturscenen är på samma plats. Om du flyttar innehållet i renderingstexturen till en plats som aldrig visas i huvudscenen visas det därför inte på huvudskärmen. Du kan till exempel flytta ett renderingstexturobjekt eller en kamera till platsen (-10000, -10000). På så sätt är lagerinställningar onödiga.

När du vill slutföra innehållet i en renderingsstruktur i en scen utan att dela upp den i olika scener

Detta görs med samma teknik som föregående metod utan lager. Du kan flytta innehållet som visas av renderingsstrukturen till en plats där det aldrig kommer att visas på huvudkameran. Skillnaden från metoden att separera scener är att du måste placera två kameror, men förutom det har du i princip samma inställningar som metoden för att separera scener.

Om du vill fånga innehåll som tagits från ett annat perspektiv i ett 3D-spel som en renderingsstruktur

Detta tips pratade inte mycket om 3D eftersom det fokuserade på 2D, men tillvägagångssättet är i princip detsamma. Eftersom du projicerar ett enda 3D-utrymme från flera perspektiv behöver du inte ha mer än två scener. Allt du behöver göra är att placera så många kameror som du behöver, ställa in ritningsdestinationen som renderingsstruktur och ställa in var renderingsstrukturen ska visas.