Usar texturas de representación para mostrar el contenido de otra escena como texturas
Entorno de verificación
- Windows
-
- Ventanas 11
- Unity Editor
-
- 2021.3.3F1
- Paquete del sistema de entrada
-
- 1.3.0
Requisitos previos para esta sugerencia
Los siguientes ajustes se han realizado de antemano como premisa para la descripción de este consejo.
Al principio
Las texturas de renderizado le permiten escribir sus dibujos en una textura en lugar de en la pantalla. Esto le permite generar texturas libremente durante la ejecución del juego sin preparar imágenes de texturas por adelantado.
También puedes escribir en una textura de renderizado que cambie dinámicamente cada fotograma, por ejemplo, para proyectar una imagen diferente de la cámara principal en una pantalla que existe en el juego.
Preparación de imágenes
Cuando se utiliza una textura de renderizado, no es necesario preparar una imagen, pero puede prepararla como muestra para que el resultado del dibujo sea más fácil de entender.
Creación de una textura de renderizado
Crear un activo a partir del proyecto. En Crear, seleccione Renderizar textura.
El nombre puede ser arbitrario. Dado que el nombre no se especifica directamente desde el NewRenderTexture
exterior en este momento, déjelo como .
Seleccione la textura de renderizado y especifique su tamaño en el Inspector. Dado que la textura de procesamiento es un área de dibujo, debe especificar un tamaño. Esta vez, quiero escribir una escena creada por separado, así que establezco la relación de aspecto en 16: 9.
Configuración del destino de textura de renderizado
Seleccione "UI" > "Imagen sin procesar" de la jerarquía de la escena que se crea inicialmente. Mostrar el contenido de la textura de representación en este objeto. Es un objeto de la interfaz de usuario, pero lo que necesita es un componente "Imagen sin procesar", que se puede establecer en otro objeto.
Se ha colocado RawImage. Dado que es un objeto de interfaz de usuario, se coloca en un lienzo. Todavía no he configurado nada, así que solo obtengo un rectángulo blanco.
Queremos que la escala sea igual entre sí, por lo que establecemos el tamaño del objeto RawImage para que sea el mismo que la textura de representación. Si mantiene la misma relación de aspecto, el resultado del dibujo sólo se escalará aunque cambie el tamaño, pero si cambia la relación de aspecto, el resultado del dibujo se aplastará vertical u horizontalmente.
El componente Raw Image del objeto RawImage tiene una "textura", así que establezca la textura de representación que acaba de crear allí. El contenido de la textura de renderizado sigue vacío, por lo que es transparente en la vista.
Creación de una escena de contenido de dibujo de textura de renderizado
A continuación, cree una nueva escena para crear el contenido que se dibujará en la textura de renderizado. Seleccione Archivo en el menú y seleccione Nueva escena.
Dado que este ejemplo es 2D, también elegirá una escena 2D.
Créelo en la carpeta Escena. SampleSceneTexture
Deje el nombre como .
Después de crear la escena, coloque los objetos adecuadamente. Todo lo que tiene que hacer es asegurarse de conocer el contenido de la textura de renderizado. Para confirmar que cualquier cosa que sobresalga fuera de la cámara no está dibujada, también se coloca un sprite cerca del marco de la cámara.
Si los objetos se superponen, el contexto de los objetos será indeterminado, por lo que si tiene un fondo, reduzca el orden de las capas de fondo.
Después de seleccionar "MainCamera", establezca la textura de renderizado en "Textura de destino". Esto hace que el dibujo se dibuje en la textura de renderizado.
Quite el componente Audio Listener establecido en MainCamera. Todo lo que necesita para una textura de renderizado es dibujar, por lo que no necesita Audio Listener. Se mostrará una advertencia si hay varios "Oyentes de audio" en tiempo de ejecución.
Por cierto, si ejecuta la escena para la textura de renderizado en este estado, no se mostrará nada en la pantalla. Esto se debe a que está dibujando en una textura de renderizado. Si desea verificarlo en la pantalla, elimine la "textura de destino" y luego ejecútela.
Configuración de capas
En este ejemplo, tendrá que mover dos escenas al mismo tiempo, pero si las mueve tal como están, el contenido a dibujar en la textura de renderizado también se mostrará en la pantalla principal, por lo que las capas no se dibujarán por separado.
Primero, seleccione "Editar capa" de la capa en la esquina superior derecha del editor.
El nombre y la ubicación son arbitrarios, pero aquí agregaremos una nueva RenderTarget
capa llamada .
Después de agregar la capa, abra la escena para la textura de renderizado, seleccione todos los objetos que desea dibujar y cambie el valor de la capa al que acaba de crear RenderTarget
.
SampleSceneTexture
Esto finalizará la edición de la escena, así que guárdelo.
Visualización de texturas de renderizado
SampleScene
Una vez que haya abierto una escena, agréguela a la jerarquía SampleSceneTexture
arrastrando y soltando la escena.
Luego, debe haber dos escenas en la jerarquía y el contenido de la escena debe mostrarse en la SampleSceneTexture
pantalla.
SampleSceneTexture
El contenido de la escena es perturbador, así que haga clic en el icono del ojo de la escena desde la SampleSceneTexture
jerarquía.
SampleSceneTexture
Esto ocultará los objetos en la escena y solo el contenido de la escena SampleScene
será visible.
Por cierto, dado que se han completado todos los ajustes de textura de renderizado,SampleScene
el contenido de la textura de renderizado debe mostrarse en la imagen sin procesar colocada en la escena.
Sin embargo, el icono de ocultarse por el ojo es solo una configuración para que sea invisible en el editor, por lo que si ejecuta SampleSceneTexture
el juego tal como está, el contenido de la escena también se mostrará en la pantalla.
SampleScene
A continuación, seleccione Escena Main Camera
y desmarque De RenderTarget
máscara de selección en el Camera
Inspector.
Esto evita que los objetos de la capa se muestren cuando RenderTarget
se ejecuta el juego.
Intenta ejecutar el juego. Debe aparecer según lo previsto.
Prueba a mover la textura de renderizado
Sin embargo, en este estado, es difícil saber si realmente está funcionando como una textura de renderizado o simplemente mostrando la imagen como un recorte, así que vamos a moverla.
El contenido puede ser cualquier cosa, pero aquí estableceremos el movimiento para rotar automáticamente el sprite. Cree un SelfRotate
script y créelo como .
Aquí, incluiremos un proceso simple de rotarse poco a poco.
using UnityEngine;
public class SelfRotate : MonoBehaviour
{
// 更新はフレームごとに 1 回呼び出されます
void Update()
{
transform.Rotate(0, 0, 0.1f);
}
}
Después de crear el script, adjunte más y más al objeto que desea rotar.
Luego ejecute el juego y vea si gira. Creo que puedes ver que el objeto se está moviendo en la textura de renderizado.
Cómo mover varias escenas al mismo tiempo
Aquí, creamos un ejemplo simple para que tengamos dos escenas ejecutándose desde el principio, pero en un juego real, hay muchos casos en los que tienes que comenzar con una sola escena. En ese caso, creo que tendrás que agregar dinámicamente escenas al principio de la escena para que sea múltiple.
Consulte "Agregar una escena" para obtener la explicación de cómo agregar una escena.
Básicamente, SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive);
llamar debería resolver la mayoría de los problemas.
Cómo evitar que el contenido de una textura de renderizado aparezca en la pantalla principal sin usar capas
El contenido de la textura de renderizado se muestra en la pantalla principal porque la escena principal y la escena de textura de renderizado están en el mismo lugar. Por lo tanto, si mueve el contenido de la textura de renderizado a un lugar que nunca se muestra en la escena principal, no se mostrará en la pantalla principal. Por ejemplo, puede mover un objeto de textura de procesamiento o una cámara a la ubicación (-10000, -10000). De esta manera, la configuración de capas es innecesaria.
Cuando desee completar el contenido de una textura de renderizado en una escena sin dividirla en diferentes escenas
Esto se hace utilizando la misma técnica que el método anterior sin capas. Puede mover el contenido mostrado por la textura de renderizado a un lugar donde nunca se mostrará en la cámara principal. La diferencia con el método de separación de escenas es que necesita colocar dos cámaras, pero aparte de eso, básicamente tendrá la misma configuración que el método de separación de escenas.
Si desea capturar contenido capturado desde una perspectiva diferente en un juego 3D como una textura de renderizado
Este consejo no hablaba mucho sobre 3D porque se centraba en 2D, pero el enfoque es básicamente el mismo. Dado que está proyectando un solo espacio 3D desde múltiples perspectivas, no necesita tener más de dos escenas. Todo lo que tiene que hacer es colocar tantas cámaras como necesite, establecer el destino del dibujo como la textura de renderizado y establecer dónde mostrar la textura de renderizado.