Použití rendrovaných textur k zobrazení obsahu jiné scény jako textur

Stránky aktualizovány :
Datum vytvoření stránky :

Ověřovací prostředí

Windows
  • Systém Windows 11
Editor jednoty
  • 2021.3.3f1
Vstupní systémový balíček
  • 1.3.0

Předpoklady pro tento tip

Následující nastavení byla provedena předem jako předpoklad pro popis tohoto tipu.

Nejprve

Vykreslení textur umožňuje psát výkresy na texturu místo na obrazovku. To vám umožní volně generovat textury během provádění hry bez předchozí přípravy obrázků textur.

Můžete také zapisovat do textury vykreslení, která se dynamicky mění každý snímek, například promítat jiný obraz z hlavní kamery na displej, který existuje ve hře.

Příprava obrázků

Při použití rendrované textury nemusíte připravovat obrázek, ale můžete jej připravit jako vzorek, aby byl výsledek kresby srozumitelnější.

Vytvoření vykreslené textury

Vytvořte z projektu datový zdroj. V části Vytvořit vyberte Vykreslit texturu.

Název může být libovolný. Vzhledem k tomu, že název není v tuto chvíli specifikován přímo zvenčí NewRenderTexture , ponechte jako .

Vyberte texturu vykreslení a určete její velikost v Inspectoru. Vzhledem k tomu, že rendrovaná textura je kreslicí plocha, je nutné zadat velikost. Tentokrát chci napsat scénu vytvořenou samostatně, takže jsem nastavil poměr stran na 16:9.

Nastavení cíle vykreslení textury

Vyberte "UI" > "Raw Image" z hierarchie scény, která je původně vytvořena. Zobrazte obsah rendrované textury v tomto objektu. Je to objekt uživatelského rozhraní, ale to, co potřebujete, je komponenta "Raw Image", kterou lze nastavit na jiný objekt.

RawImage byl umístěn. Protože se jedná o objekt uživatelského rozhraní, je umístěn na plátně. Ještě jsem nic nenastavil, tak mám jen bílý obdélník.

Chceme, aby měřítko bylo navzájem stejné, proto jsme nastavili velikost objektu RawImage tak, aby byla stejná jako vykreslená textura. Pokud zachováte stejný poměr stran, změní se měřítko výsledku kreslení pouze v případě, že změníte velikost, ale pokud změníte poměr stran, výsledek kresby bude rozdrcen svisle nebo vodorovně.

Komponenta Raw Image objektu RawImage má "texturu", takže nastavte texturu vykreslení, kterou jste tam právě vytvořili. Obsah rendrované textury je stále prázdný, takže je v zobrazení průhledný.

Vytvoření scény rendrované textury kresleného obsahu

Dále vytvořte novou scénu a vytvořte obsah, který se má vykreslit do textury vykreslení. Z nabídky zvolte Soubor a vyberte Nová scéna.

Vzhledem k tomu, že tato ukázka je 2D, vyberete si také 2D scénu.

Vytvořte ji ve složce Scéna. SampleSceneTexture Název ponechte jako .

Po vytvoření scény umístěte objekty odpovídajícím způsobem. Jediné, co musíte udělat, je ujistit se, že znáte obsah vykreslené textury. Aby se potvrdilo, že vše, co vyčnívá mimo kameru, není nakresleno, je v blízkosti rámu kamery umístěn také pohyblivý symbol.

Pokud se objekty překrývají, kontext objektů bude neurčitý, takže pokud máte pozadí, snižte pořadí vrstev pozadí.

Po výběru "MainCamera" nastavte texturu vykreslení v "Target texture". To způsobí, že výkres bude nakreslen v rendrované textuře.

Odeberte komponentu Audio Listener nastavenou na MainCamera. Vše, co potřebujete pro texturu vykreslení, je kreslení, takže nepotřebujete posluchače zvuku. Pokud je za běhu více "Audio posluchačů", zobrazí se varování.

Mimochodem, pokud spustíte scénu pro texturu vykreslení v tomto stavu, na obrazovce se nic nezobrazí. Je to proto, že kreslíte na rendrovanou texturu. Pokud to chcete zkontrolovat na obrazovce, odstraňte "cílovou texturu" a poté ji proveďte.

Nastavení vrstev

V této ukázce budete muset přesunout dvě scény současně, ale pokud je přesunete tak, jak jsou, obsah, který má být nakreslen v texturě vykreslení, se zobrazí také na hlavní obrazovce, takže vrstvy nebudou vykresleny samostatně.

Nejprve vyberte "Upravit vrstvu" z vrstvy v pravém horním rohu editoru.

Název a umístění jsou libovolné, ale zde přidáme novou RenderTarget vrstvu s názvem .

Po přidání vrstvy otevřete scénu pro rendrovanou texturu, vyberte všechny objekty, které chcete nakreslit, a změňte hodnotu vrstvy na tu, kterou jste právě vytvořili RenderTarget .

SampleSceneTexture Tím se ukončí editace scény, proto ji prosím uložte.

Zobrazení rendrovaných textur

SampleScene Jakmile otevřete scénu, přidejte ji do hierarchie SampleSceneTexture přetažením scény. Poté by měly být v hierarchii dvě scény a obsah scény by měl být zobrazen na SampleSceneTexture obrazovce.

SampleSceneTexture Obsah scény je rušivý, proto klikněte na ikonu oka scény v hierarchii SampleSceneTexture . SampleSceneTexture Tím se objekty ve scéně skryjí a zobrazí se pouze obsah scény SampleScene . Mimochodem, protože všechna nastavení textury vykreslení byla dokončena,SampleScene obsah vykreslené textury by měl být zobrazen v surovém obrazu umístěném ve scéně.

Skrytí ikonou oka je však pouze nastavením, které ji v editoru zneviditelní, takže pokud spustíte SampleSceneTexture hru tak, jak je, obsah scény se také zobrazí na obrazovce. SampleScene Poté vyberte možnost Scéna Main Camera a zrušte zaškrtnutí políčka Z RenderTarget masky odstranění obsahu v InspektoruCamera. Tím zabráníte zobrazení objektů ve vrstvě při RenderTarget spuštění hry.

Zkuste hru spustit. Mělo by to vypadat tak, jak bylo zamýšleno.

Zkuste přesunout texturu vykreslení

V tomto stavu je však obtížné zjistit, zda skutečně funguje jako vykreslená textura nebo jednoduše zobrazuje obrázek jako oříznutí, takže jej přesuňme.

Obsah může být cokoliv, ale zde nastavíme pohyb tak, aby automaticky otáčel pohyb. SelfRotate Vytvořte skript a vytvořte ho jako .

Zde zahrneme jednoduchý proces otáčení se postupně.

using UnityEngine;

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

Po vytvoření skriptu připojujte více a více k objektu, který chcete otočit.

Poté spusťte hru a zjistěte, zda se točí. Myslím, že vidíte, že se objekt pohybuje v texturě vykreslení.

Jak přesunout více scén současně

Zde jsme vytvořili jednoduchý příklad, takže máme dvě scény běžící od začátku, ale ve skutečné hře existuje mnoho případů, kdy musíte začít s jednou scénou. V takovém případě si myslím, že budete muset dynamicky přidávat scény na začátku scény, aby to bylo více scén.

V části "Přidání scény" naleznete vysvětlení, jak přidat scénu. SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); V podstatě by volání mělo vyřešit většinu problémů.

Jak zabránit zobrazení obsahu rendrované textury na hlavní obrazovce bez použití vrstev

Obsah rendrované textury se zobrazí na hlavní obrazovce, protože hlavní scéna a scéna rendrované textury jsou na stejném místě. Pokud tedy přesunete obsah rendrované textury na místo, které se v hlavní scéně nikdy nezobrazí, na hlavní obrazovce se nezobrazí. Můžete například přesunout objekt rendrované textury nebo kameru do umístění (-10000, -10000). Tímto způsobem jsou nastavení vrstev zbytečná.

Když chcete dokončit obsah rendrované textury v jedné scéně, aniž byste ji rozdělili na různé scény

To se provádí stejnou technikou jako předchozí metoda bez vrstev. Obsah zobrazený texturou rendrování můžete přesunout na místo, kde se nikdy nezobrazí na hlavním fotoaparátu. Rozdíl od způsobu oddělování scén spočívá v tom, že musíte umístit dvě kamery, ale kromě toho budete mít v podstatě stejné nastavení jako způsob oddělení scén.

Pokud chcete zachytit obsah zachycený z jiné perspektivy ve 3D hře jako texturu vykreslení

Tento tip moc nemluvil o 3D, protože se zaměřil na 2D, ale přístup je v podstatě stejný. Vzhledem k tomu, že promítáte jeden 3D prostor z více perspektiv, nemusíte mít více než dvě scény. Jediné, co musíte udělat, je umístit tolik kamer, kolik potřebujete, nastavit cíl výkresu jako texturu vykreslení a nastavit, kde se má zobrazit textura vykreslení.