Renderstructuren gebruiken om de inhoud van een andere scène als structuren weer te geven

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Verificatieomgeving

Ramen
  • Voor Windows 11
Unity Editor
  • 2021.3.3f1
Input systeem pakket
  • 1.3.0

Vereisten voor deze tip

De volgende instellingen zijn vooraf gemaakt als uitgangspunt voor de beschrijving van deze tip.

Eerst

Met renderstructuren kunt u uw tekeningen naar een structuur schrijven in plaats van naar het scherm. Hiermee kunt u vrijelijk texturen genereren tijdens de uitvoering van het spel zonder van tevoren textuurafbeeldingen voor te bereiden.

U kunt ook schrijven naar een rendertextuur die elk frame dynamisch verandert, bijvoorbeeld om een ander beeld van de hoofdcamera te projecteren op een scherm dat in het spel bestaat.

Afbeeldingen voorbereiden

Wanneer u een renderstructuur gebruikt, hoeft u een afbeelding niet voor te bereiden, maar kunt u deze als voorbeeld voorbereiden om het tekenresultaat begrijpelijker te maken.

Een renderstructuur maken

Maak een asset van het project. Selecteer bij Maken de optie Structuur renderen.

De naam kan willekeurig zijn. Aangezien de naam op dit moment niet rechtstreeks van buitenaf NewRenderTexture wordt opgegeven, laat u als .

Selecteer de renderstructuur en geef de grootte ervan op in het infovenster. Aangezien de renderstructuur een tekengebied is, moet u een grootte opgeven. Deze keer wil ik een scène schrijven die afzonderlijk is gemaakt, dus ik stel de beeldverhouding in op 16: 9.

De bestemming van de renderstructuur instellen

Selecteer "UI" > "Raw Image" in de hiërarchie van de scène die oorspronkelijk is gemaakt. Geef de inhoud van de renderstructuur in dit object weer. Het is een object van de gebruikersinterface, maar wat u nodig hebt, is een component "Raw Image", die op een ander object kan worden ingesteld.

De RawImage is geplaatst. Omdat het een UI-object is, wordt het in een canvas geplaatst. Ik heb nog niets ingesteld, dus ik krijg gewoon een witte rechthoek.

We willen dat de schaal gelijk is aan elkaar, dus stellen we de grootte van het RawImage-object in op hetzelfde als de renderstructuur. Als u de hoogte-breedteverhouding hetzelfde houdt, wordt het tekenresultaat alleen geschaald, zelfs als u de grootte wijzigt, maar als u de hoogte-breedteverhouding wijzigt, wordt het tekenresultaat verticaal of horizontaal verpletterd.

De component Raw Image van het RawImage-object heeft een "textuur", dus stel de renderstructuur in die u daar zojuist hebt gemaakt. De inhoud van de renderstructuur is nog leeg, dus ze zijn transparant in de weergave.

Een scène maken met tekeninhoud voor rendertextuur

Maak vervolgens een nieuwe scène om de inhoud te maken die in de renderstructuur moet worden getekend. Kies Bestand in het menu en selecteer Nieuwe scène.

Omdat dit voorbeeld 2D is, kiest u ook een 2D-scène.

Maak het in de map Scène. SampleSceneTexture Laat de naam staan als .

Nadat u de scène hebt gemaakt, plaatst u de objecten op de juiste manier. Het enige dat u hoeft te doen, is ervoor zorgen dat u de inhoud van de rendertextuur kent. Om te bevestigen dat alles wat buiten de camera uitsteekt niet is getekend, wordt er ook een sprite bij het cameraframe geplaatst.

Als de objecten elkaar overlappen, is de context van de objecten onbepaald, dus als u een achtergrond hebt, verlaagt u de volgorde van de achtergrondlagen.

Nadat u "MainCamera" hebt geselecteerd, stelt u de rendertextuur in op "Doeltextuur". Hierdoor wordt de tekening getekend in de renderstructuur.

Verwijder de component Audio Listener die is ingesteld op MainCamera. Het enige dat u nodig hebt voor een rendertextuur is tekenen, dus u hebt geen audioluisteraar nodig. Er wordt een waarschuwing weergegeven als er meerdere "Audio Listeners" zijn tijdens runtime.

Trouwens, als u de scène voor de rendertextuur in deze staat uitvoert, wordt er niets op het scherm weergegeven. Dit komt omdat u tekent op een renderstructuur. Als u het op het scherm wilt controleren, verwijdert u de "doeltextuur" en voert u deze vervolgens uit.

Laaginstellingen

In dit voorbeeld moet u twee scènes tegelijkertijd verplaatsen, maar als u ze verplaatst zoals ze zijn, wordt de inhoud die in de renderstructuur moet worden getekend ook weergegeven op het hoofdscherm, zodat de lagen niet afzonderlijk worden getekend.

Selecteer eerst "Laag bewerken" in de laag in de rechterbovenhoek van de editor.

De naam en locatie zijn willekeurig, maar hier zullen we een nieuwe RenderTarget laag toevoegen met de naam .

Nadat u de laag hebt toegevoegd, opent u de scène voor de renderstructuur, selecteert u alle objecten die u wilt tekenen en wijzigt u de laagwaarde in de waarde die u zojuist hebt gemaakt RenderTarget .

SampleSceneTexture Hiermee wordt de bewerking van de scène beëindigd, dus sla deze op.

Renderstructuren weergeven

SampleScene Nadat u een scène hebt geopend, voegt u deze toe aan de hiërarchie SampleSceneTexture door de scène te slepen en neer te zetten. Vervolgens moeten er twee scènes in de hiërarchie zijn en moet de inhoud van de scène op het SampleSceneTexture scherm worden weergegeven.

SampleSceneTexture De inhoud van de scène is storend, dus klik op het oogpictogram van de scène in de SampleSceneTexture hiërarchie. SampleSceneTexture Hierdoor worden de objecten in de scène verborgen en is alleen de inhoud van de scène SampleScene zichtbaar. Trouwens, aangezien alle instellingen voor de rendertextuur zijn voltooid,SampleScene moet de inhoud van de rendertextuur worden weergegeven in de onbewerkte afbeelding die in de scène is geplaatst.

Het verbergen door het oogpictogram is echter slechts een instelling om het onzichtbaar te maken op de editor, dus als u het spel uitvoert SampleSceneTexture zoals het is, wordt de inhoud van de scène ook op het scherm weergegeven. SampleScene Selecteer vervolgens Scène Main Camera en verwijder het vinkje bij Van ruimingsmasker in het RenderTarget Camera infovenster. Dit voorkomt dat de objecten in de laag worden weergegeven wanneer RenderTarget het spel wordt uitgevoerd.

Probeer het spel uit te voeren. Het moet eruit zien zoals bedoeld.

Probeer de renderstructuur te verplaatsen

In deze toestand is het echter moeilijk om te weten of het echt werkt als een rendertextuur of gewoon de afbeelding als een uitsnede weergeeft, dus laten we het verplaatsen.

De inhoud kan van alles zijn, maar hier zullen we de beweging instellen om de sprite automatisch te roteren. Maak een SelfRotate script en maak het als .

Hier zullen we een eenvoudig proces van zichzelf beetje bij beetje roteren.

using UnityEngine;

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

Nadat u het script hebt gemaakt, koppelt u steeds meer aan het object dat u wilt roteren.

Voer vervolgens het spel uit en kijk of het draait. Ik denk dat je kunt zien dat het object beweegt in de rendertextuur.

Meerdere scènes tegelijk verplaatsen

Hier hebben we een eenvoudig voorbeeld gemaakt, zodat we vanaf het begin twee scènes hebben, maar in een echt spel zijn er veel gevallen waarin je met een enkele scène moet beginnen. In dat geval denk ik dat je dynamisch scènes aan het begin van de scène moet toevoegen om er meerdere scènes van te maken.

Raadpleeg "Een scène toevoegen" voor de uitleg over het toevoegen van een scène. Kortom, SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); bellen zou de meeste problemen moeten oplossen.

Voorkomen dat de inhoud van een renderstructuur op het hoofdscherm wordt weergegeven zonder lagen te gebruiken

De inhoud van de renderstructuur wordt weergegeven op het hoofdscherm omdat de hoofdscène en de rendertextuurscène zich op dezelfde plaats bevinden. Als u de inhoud van de renderstructuur verplaatst naar een plaats die nooit in de hoofdscène wordt weergegeven, wordt deze daarom niet weergegeven op het hoofdscherm. U kunt bijvoorbeeld een renderstructuurobject of -camera verplaatsen naar de locatie (-10000, -10000). Op deze manier zijn laaginstellingen overbodig.

Wanneer u de inhoud van een renderstructuur in één scène wilt voltooien zonder deze in verschillende scènes te verdelen

Dit gebeurt met dezelfde techniek als de vorige methode zonder lagen. U kunt de inhoud die wordt weergegeven door de renderstructuur verplaatsen naar een plaats waar deze nooit wordt weergegeven op de hoofdcamera. Het verschil met de methode om scènes te scheiden, is dat je twee camera's moet plaatsen, maar verder heb je in principe dezelfde instellingen als de methode om scènes te scheiden.

Als u inhoud die vanuit een ander perspectief in een 3D-game is vastgelegd, wilt vastleggen als een rendertextuur

Deze tip sprak niet veel over 3D omdat het zich richtte op 2D, maar de aanpak is in principe hetzelfde. Omdat u één 3D-ruimte vanuit meerdere perspectieven projecteert, hoeft u niet meer dan twee scènes te hebben. Het enige dat u hoeft te doen, is zoveel camera's plaatsen als u nodig hebt, de tekenbestemming instellen als de rendertextuur en instellen waar de rendertextuur moet worden weergegeven.