Použitie vykreslenia textúr na zobrazenie obsahu inej scény ako textúr

Stránka aktualizovaná :
Dátum vytvorenia strany :

Prostredie overovania

Windows
  • Windows 11
Editor jednoty
  • 2021.3.3f1
Vstupný systémový balík
  • 1.3.0

Predpoklady pre tento tip

Nasledujúce nastavenia boli vykonané vopred ako predpoklad pre popis tohto tipu.

Najskôr

Vykreslenie textúr vám umožňuje zapisovať kresby na textúru namiesto obrazovky. To vám umožní voľne generovať textúry počas vykonávania hry bez toho, aby ste vopred pripravovali obrázky textúr.

Môžete tiež zapisovať do vykresľovacej textúry, ktorá dynamicky mení každú snímku, napríklad na premietanie iného obrazu z hlavnej kamery na displej, ktorý existuje v hre.

Príprava obrázkov

Pri použití textúry vykresľovania nemusíte pripravovať obrázok, ale môžete ho pripraviť ako vzorku, aby bol výsledok kresby zrozumiteľnejší.

Vytvorenie textúry vykreslenia

Vytvorte zdroj z projektu. V časti Vytvoriť vyberte položku Vykresliť textúru.

Názov môže byť ľubovoľný. Keďže názov nie je v súčasnosti špecifikovaný priamo zvonku NewRenderTexture , nechajte ako .

Vyberte textúru vykreslenia a zadajte jej veľkosť z inšpektora. Keďže textúra vykreslenia je oblasť kreslenia, musíte zadať veľkosť. Tentokrát chcem napísať scénu vytvorenú samostatne, takže som nastavil pomer strán na 16:9.

Nastavenie cieľa textúry vykreslenia

Vyberte "UI" > "Raw Image" z hierarchie scény, ktorá je pôvodne vytvorená. Zobrazenie obsahu textúry vykreslenia v tomto objekte. Je to objekt používateľského rozhrania, ale to, čo potrebujete, je komponent "Raw Image", ktorý je možné nastaviť na iný objekt.

RawImage bol umiestnený. Keďže ide o objekt používateľského rozhrania, je umiestnený na plátne. Ešte som nič nenastavil, takže dostanem len biely obdĺžnik.

Chceme, aby mierka bola rovnaká, preto sme nastavili veľkosť objektu RawImage tak, aby bola rovnaká ako textúra vykreslenia. Ak ponecháte pomer strán rovnaký, výsledok kresby sa zmení iba v prípade, že zmeníte veľkosť, ale ak zmeníte pomer strán, výsledok kresby sa rozdrví vertikálne alebo horizontálne.

Komponent Raw Image objektu RawImage má "textúru", preto nastavte textúru vykreslenia, ktorú ste tam práve vytvorili. Obsah textúry vykreslenia je stále prázdny, takže je v zobrazení priehľadný.

Vytvorenie scény vykreslenia obsahu kresby textúr

Potom vytvorte novú scénu na vytvorenie obsahu, ktorý sa má nakresliť v textúre vykreslenia. V menu vyberte položku Súbor a vyberte položku Nová scéna.

Keďže táto ukážka je 2D, vyberiete si aj 2D scénu.

Vytvorte ho v priečinku Scéna. SampleSceneTexture Názov ponechajte ako .

Po vytvorení scény objekty vhodne umiestnite. Jediné, čo musíte urobiť, je uistiť sa, že poznáte obsah textúry vykreslenia. Aby sa potvrdilo, že všetko, čo vyčnieva mimo fotoaparátu, nie je nakreslené, je v blízkosti rámu kamery umiestnený aj sprite.

Ak sa objekty prekrývajú, kontext objektov bude neurčitý, takže ak máte pozadie, znížte poradie vrstiev pozadia.

Po výbere "MainCamera" nastavte text vykreslenia v časti "Cieľová textúra". To spôsobí nakreslenie kresby v textúre vykreslenia.

Demontujte súčasť Audio Listener nastavenú na MainCamera. Všetko, čo potrebujete na vykreslenie textúry, je kreslenie, takže nepotrebujete Audio Listener. Upozornenie sa zobrazí, ak je počas behu viac "zvukových poslucháčov".

Mimochodom, ak spustíte scénu pre textúru vykreslenia v tomto stave, na obrazovke sa nič nezobrazí. Je to preto, že kreslíte na textúru vykreslenia. Ak to chcete skontrolovať na obrazovke, odstráňte "cieľovú textúru" a potom ju spustite.

Nastavenia vrstvy

V tejto ukážke budete musieť presunúť dve scény súčasne, ale ak ich presuniete tak, ako sú, obsah, ktorý sa má nakresliť v textúre vykreslenia, sa zobrazí aj na hlavnej obrazovke, takže vrstvy nebudú nakreslené samostatne.

Najprv vyberte "Upraviť vrstvu" z vrstvy v pravom hornom rohu editora.

Názov a umiestnenie sú ľubovoľné, ale tu pridáme novú RenderTarget vrstvu s názvom .

Po pridaní vrstvy otvorte scénu pre textúru vykreslenia, vyberte všetky objekty, ktoré chcete nakresliť, a zmeňte hodnotu vrstvy na tú, ktorú ste práve vytvorili RenderTarget .

SampleSceneTexture Tým sa ukončí úprava scény, preto ju prosím uložte.

Zobrazenie textúr vykreslenia

SampleScene Po otvorení scény ju pridajte do hierarchie SampleSceneTexture presunutím scény. Potom by mali byť v hierarchii dve scény a obsah scény by sa mal zobraziť na SampleSceneTexture obrazovke.

SampleSceneTexture Obsah scény je rušivý, preto kliknite na ikonu oka scény z SampleSceneTexture hierarchie. SampleSceneTexture Tým sa skryjú objekty v scéne a bude viditeľný iba obsah scény SampleScene . Mimochodom, keďže všetky nastavenia textúry vykresľovania boli dokončené,SampleScene obsah textúry vykreslenia by sa mal zobraziť na surovom obrázku umiestnenom v scéne.

Skrytie ikonou oka je však iba nastavením, aby bola v editore neviditeľná, takže ak spustíte SampleSceneTexture hru tak, ako je, na obrazovke sa zobrazí aj obsah scény. SampleScene Potom vyberte položku Scene (ScénaMain Camera) a zrušte začiarknutie políčka From Culling Mask (Z RenderTarget masky Camera vyradenia) v časti Inspector (Inšpektor). Tým sa zabráni zobrazeniu objektov vo vrstve pri RenderTarget spustení hry.

Skúste hru spustiť. Malo by to vyzerať podľa plánu.

Skúste presunúť textúru vykreslenia

V tomto stave je však ťažké vedieť, či skutočne funguje ako textúra vykresľovania alebo jednoducho zobrazuje obrázok ako orezanie, takže ho presuňme.

Obsah môže byť čokoľvek, ale tu nastavíme pohyb tak, aby sa sprite automaticky otáčal. Vytvorte SelfRotate skript a vytvorte ho ako súbor .

Tu zahrnieme jednoduchý proces otáčania sa kúsok po kúsku.

using UnityEngine;

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

Po vytvorení skriptu pripájajte viac a viac k objektu, ktorý chcete otočiť.

Potom spustite hru a zistite, či sa točí. Myslím, že môžete vidieť, že objekt sa pohybuje v textúre vykreslenia.

Ako presunúť viacero scén súčasne

Tu sme vytvorili jednoduchý príklad, takže máme dve scény bežiace od začiatku, ale v skutočnej hre je veľa prípadov, keď musíte začať s jednou scénou. V takom prípade si myslím, že budete musieť dynamicky pridávať scény na začiatku scény, aby to bolo viac scén.

Pozrite si časť "Pridanie scény", kde nájdete vysvetlenie, ako pridať scénu. V zásade SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); by volanie malo vyriešiť väčšinu problémov.

Ako zabrániť tomu, aby sa obsah textúry vykresľovania zobrazoval na hlavnej obrazovke bez použitia vrstiev

Obsah textúry vykreslenia sa zobrazí na hlavnej obrazovke, pretože hlavná scéna a scéna vykreslenia textúry sú na rovnakom mieste. Preto ak presuniete obsah textúry vykreslenia na miesto, ktoré sa nikdy nezobrazí v hlavnej scéne, nezobrazí sa na hlavnej obrazovke. Môžete napríklad presunúť objekt alebo kameru vykresľovania textúry na miesto (-10000, -10000). Týmto spôsobom nie sú potrebné nastavenia vrstiev.

Ak chcete dokončiť obsah textúry vykreslenia v jednej scéne bez toho, aby ste ju rozdelili na rôzne scény

To sa vykonáva rovnakou technikou ako predchádzajúca metóda bez vrstiev. Obsah zobrazený textúrou vykresľovania môžete presunúť na miesto, kde sa nikdy nezobrazí na hlavnej kamere. Rozdiel od spôsobu oddelenia scén spočíva v tom, že musíte umiestniť dve kamery, ale okrem toho budete mať v podstate rovnaké nastavenia ako spôsob oddelenia scén.

Ak chcete zachytiť obsah zachytený z inej perspektívy v 3D hre ako textúru vykreslenia

Tento tip nehovoril veľa o 3D, pretože sa zameral na 2D, ale prístup je v podstate rovnaký. Keďže premietate jeden 3D priestor z viacerých perspektív, nemusíte mať viac ako dve scény. Jediné, čo musíte urobiť, je umiestniť toľko kamier, koľko potrebujete, nastaviť cieľ kreslenia ako textúru vykreslenia a nastaviť, kde sa má textúra vykreslenia zobraziť.