Utilitzar textures renderitzades per mostrar el contingut d'una altra escena com a textures

Pàgina actualitzada :
Data de creació de la pàgina :

Entorn de verificació

Windows
  • Finestres 11
Editor d'unitat
  • 2021.3.3f1
Paquet del sistema d'entrada
  • 1.3.0

Requisits previs per a aquest consell

La configuració següent s'ha fet amb antelació com a premissa per a la descripció d'aquest consell.

Al principi

Les textures de renderització us permeten escriure els vostres dibuixos a una textura en lloc de la pantalla. Això us permet generar textures lliurement durant l'execució del joc sense preparar imatges de textura amb antelació.

També podeu escriure a una textura de renderització que canviï dinàmicament cada fotograma, per exemple, per projectar una imatge diferent de la càmera principal en una pantalla que existeix al joc.

Preparació d'imatges

Quan utilitzeu una textura de renderització, no cal preparar una imatge, però podeu preparar-la com a mostra per facilitar la comprensió del resultat del dibuix.

Creació d'una textura de render

Creeu un actiu a partir del projecte. A Crea, seleccioneu Renderitza la textura.

El nom pot ser arbitrari. Com que el nom no s'especifica directament des de l'exterior NewRenderTexture en aquest moment, deixeu com .

Seleccioneu la textura de renderització i especifiqueu-ne la mida a l'inspector. Com que la textura de render és una àrea de dibuix, heu d'especificar una mida. Aquesta vegada, vull escriure una escena creada per separat, així que estableixo la relació d'aspecte a 16:9.

Configuració de la destinació de la textura de renderització

Seleccioneu "UI" > "Imatge RAW" de la jerarquia de l'escena creada inicialment. Mostreu el contingut de la textura de render en aquest objecte. És un objecte de la interfície d'usuari, però el que necessiteu és un component "Imatge RAW", que es pot configurar a un altre objecte.

S'ha col·locat la RawImage. Com que és un objecte d'interfície d'usuari, es col·loca en un llenç. Encara no he posat res, així que només tinc un rectangle blanc.

Volem que l'escala sigui igual entre si, de manera que establim que la mida de l'objecte RawImage sigui la mateixa que la textura de render. Si manteniu la relació d'aspecte igual, el resultat del dibuix només s'escalarà encara que canvieu la mida, però si canvieu la relació d'aspecte, el resultat del dibuix es triturarà verticalment o horitzontalment.

El component Raw Image de l'objecte RawImage té una "textura", així que configureu la textura de renderització que acabeu de crear allà. El contingut de la textura de render encara està buit, de manera que són transparents a la vista.

Creació d'una escena de renderitzar contingut de dibuix de textures

A continuació, creeu una escena nova per crear el contingut que es dibuixarà a la textura de renderització. Trieu Fitxer al menú i seleccioneu Escena nova.

Com que aquesta mostra és 2D, també escollireu una escena 2D.

Creeu-lo a la carpeta Escena. SampleSceneTexture Deixeu el nom com .

Després de crear l'escena, col·loqueu els objectes adequadament. Tot el que heu de fer és assegurar-vos que coneixeu el contingut de la textura de render. Per confirmar que no es dibuixa res que sobresurti fora de la càmera, també es col·loca un personatge a prop del marc de la càmera.

Si els objectes se superposen, el context dels objectes serà indeterminat, de manera que si teniu fons, rebaixeu l'ordre de les capes de fons.

Després de seleccionar "MainCamera", configureu la textura de renderització a "Textura objectiu". Això fa que el dibuix es dibuixi en la textura de render.

Traieu el component Oient d'àudio establert a MainCamera. Tot el que necessiteu per a una textura de renderització és dibuixar, de manera que no necessiteu Audienciador d'àudio. Es mostrarà un advertiment si hi ha diversos "oients d'àudio" en temps d'execució.

Per cert, si executeu l'escena per a la textura de render en aquest estat, no es mostrarà res a la pantalla. Això es deu al fet que esteu dibuixant una textura de render. Si voleu comprovar-ho a la pantalla, elimineu la "textura objectiu" i executeu-la.

Configuració de la capa

En aquesta mostra, haureu de moure dues escenes alhora, però si les moveu tal com són, el contingut a dibuixar a la textura de render també es mostrarà a la pantalla principal, de manera que les capes no es dibuixaran per separat.

Primer, seleccioneu "Edita la capa" a la capa de l'extrem superior dret de l'editor.

El nom i la ubicació són arbitraris, però aquí afegirem una nova RenderTarget capa anomenada .

Després d'afegir la capa, obriu l'escena per a la textura de renderització, seleccioneu tots els objectes que vulgueu dibuixar i canvieu el valor de la capa al que acabeu de crear RenderTarget .

SampleSceneTexture Això acabarà amb l'edició de l'escena, així que si us plau, guardeu-la.

Mostrant textures de renderització

SampleScene Un cop hàgiu obert una escena, afegiu-la a la jerarquia SampleSceneTexture arrossegant i deixant anar l'escena. Aleshores, hi hauria d'haver dues escenes a la jerarquia i el contingut de l'escena s'hauria de mostrar a la SampleSceneTexture pantalla.

SampleSceneTexture El contingut de l'escena és inquietant, així que feu clic a la icona de l'ull de l'escena des de la SampleSceneTexture jerarquia. SampleSceneTexture Això amagarà els objectes de l'escena i només seran visibles els continguts de l'escena SampleScene . Per cert, ja que s'han completat tots els paràmetres de textura de renderització,SampleScene el contingut de la textura de render s'ha de mostrar a la imatge en brut situada a l'escena.

Tanmateix, l'ocultació per la icona de l'ull només és una configuració per fer-la invisible a l'editor, de manera que si executeu SampleSceneTexture el joc tal com és, el contingut de l'escena també es mostrarà a la pantalla. SampleScene A continuació, seleccioneu Escena Main Camera i desmarqueu Màscara de RenderTarget sacrifici a l'inspectorCamera. Això evita que els objectes de la capa es mostrin quan RenderTarget s'executa el joc.

Proveu d'executar el joc. Hauria d'aparèixer com es pretén.

Proveu de moure la textura de renderització

Tanmateix, en aquest estat, és difícil saber si realment funciona com a textura de renderització o simplement mostrant la imatge com a retallada, així que movem-la.

El contingut pot ser qualsevol cosa, però aquí configurarem el moviment perquè giri automàticament l'sprite. Creeu un SelfRotate script i creeu-lo com a .

Aquí inclourem un senzill procés de rotació a poc a poc.

using UnityEngine;

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

Després de crear l'script, connecteu-lo cada vegada més a l'objecte que voleu girar.

A continuació, executeu el joc i vegeu si gira. Crec que es pot veure que l'objecte es mou en la textura de render.

Com moure diverses escenes alhora

Aquí, hem creat un exemple senzill perquè tinguem dues escenes corrent des del principi, però en un joc real, hi ha molts casos en què has de començar amb una sola escena. En aquest cas, crec que haureu d'afegir dinàmicament escenes al principi de l'escena per convertir-la en diverses escenes.

Consulteu "Afegir una escena" per obtenir l'explicació de com afegir una escena. Bàsicament, SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); trucar hauria de resoldre la majoria dels problemes.

Com evitar que el contingut d'una textura de renderització aparegui a la pantalla principal sense utilitzar capes

El contingut de la textura de render es mostra a la pantalla principal perquè l'escena principal i l'escena de textura de render es troben al mateix lloc. Per tant, si moveu el contingut de la textura de render a un lloc que mai no es mostra a l'escena principal, no es mostrarà a la pantalla principal. Per exemple, podeu moure un objecte de textura de renderització o una càmera a la ubicació (-10000, -10000). D'aquesta manera, la configuració de la capa és innecessària.

Quan vulgueu completar el contingut d'una textura de render en una escena sense dividir-la en diferents escenes

Això es fa mitjançant la mateixa tècnica que el mètode anterior sense capes. Podeu moure el contingut que mostra la textura de renderització a un lloc on mai no es mostrarà a la càmera principal. La diferència amb el mètode de separació d'escenes és que heu de col·locar dues càmeres, però a part d'això, bàsicament tindreu la mateixa configuració que el mètode de separació d'escenes.

Si voleu capturar contingut capturat des d'una perspectiva diferent en un joc 3D com a textura de render

Aquest consell no parlava molt del 3D perquè se centrava en el 2D, però l'enfocament és bàsicament el mateix. Com que esteu projectant un sol espai 3D des de múltiples perspectives, no necessiteu tenir més de dues escenes. Tot el que heu de fer és col·locar tantes càmeres com necessiteu, establir la destinació del dibuix com a textura de renderització i establir on mostrar la textura de renderització.