Usar texturas de renderização para exibir o conteúdo de outra cena como texturas

Página atualizada :
Data de criação de página :

Ambiente de verificação

Windows
  • Janelas 11
Unity Editor
  • 2021.3.3f1
Pacote do sistema de entrada
  • 1.3.0

Pré-requisitos para esta dica

As configurações a seguir foram feitas com antecedência como premissa para a descrição desta dica.

Inicialmente

As texturas de renderização permitem que você escreva seus desenhos em uma textura em vez da tela. Isso permite que você gere texturas livremente durante a execução do jogo sem preparar imagens de textura com antecedência.

Você também pode gravar em uma textura de renderização que muda dinamicamente a cada quadro, por exemplo, para projetar uma imagem diferente da câmera principal em uma tela existente no jogo.

Preparando imagens

Ao usar uma textura de renderização, você não precisa preparar uma imagem, mas pode prepará-la como uma amostra para tornar o resultado do desenho mais fácil de entender.

Criando uma textura de renderização

Crie um ativo a partir do projeto. Em Criar, selecione Renderizar textura.

O nome pode ser arbitrário. Como o nome não é especificado diretamente do lado de NewRenderTexture fora neste momento, deixe como .

Selecione a textura de renderização e especifique seu tamanho no Inspetor. Como a textura de renderização é uma área de desenho, você deve especificar um tamanho. Desta vez, quero escrever uma cena criada separadamente, então defini a proporção para 16:9.

Definindo o destino da textura de renderização

Selecione "UI" > "Raw Image" na hierarquia da cena criada inicialmente. Exiba o conteúdo da textura de renderização neste objeto. É um objeto da interface do usuário, mas o que você precisa é de um componente "Imagem bruta", que pode ser definido como outro objeto.

O RawImage foi colocado. Como é um objeto de interface do usuário, ele é colocado em um Canvas. Eu não defini nada ainda, então eu só tenho um retângulo branco.

Queremos que a escala seja igual entre si, então definimos o tamanho do objeto RawImage para ser o mesmo que a textura de renderização. Se você mantiver a mesma proporção, o resultado do desenho só será dimensionado mesmo se você alterar o tamanho, mas se você alterar a proporção, o resultado do desenho será esmagado vertical ou horizontalmente.

O componente Imagem Bruta do objeto RawImage tem uma "textura", então defina a textura de renderização que você acabou de criar lá. O conteúdo da textura de renderização ainda está vazio, portanto, eles são transparentes na exibição.

Criando uma cena de conteúdo de desenho de textura de renderização

Em seguida, crie uma nova cena para criar o conteúdo a ser desenhado na textura de renderização. Escolha Arquivo no menu e selecione Nova cena.

Como este exemplo é 2D, você também escolherá uma cena 2D.

Crie-o na pasta Cena. SampleSceneTexture Deixe o nome como .

Depois de criar a cena, coloque os objetos adequadamente. Tudo o que você precisa fazer é certificar-se de que conhece o conteúdo da textura de renderização. Para confirmar que qualquer coisa que se projeta para fora da câmera não é desenhada, um sprite também é colocado perto da moldura da câmera.

Se os objetos se sobrepõem, o contexto dos objetos será indeterminado, portanto, se você tiver um plano de fundo, diminua a ordem das camadas de plano de fundo.

Depois de selecionar "MainCamera", defina a textura de renderização em "Target texture". Isso faz com que o desenho seja desenhado na textura de renderização.

Remova o componente Ouvinte de áudio definido como MainCamera. Tudo o que você precisa para uma textura de renderização é desenhar, então você não precisa do Audio Listener. Um aviso será exibido se houver vários "ouvintes de áudio" em tempo de execução.

A propósito, se você executar a cena para a textura de renderização nesse estado, nada será exibido na tela. Isso ocorre porque você está desenhando em uma textura de renderização. Se você quiser verificá-lo na tela, exclua a "textura de destino" e, em seguida, execute-o.

Configurações de camada

Neste exemplo, você terá que mover duas cenas ao mesmo tempo, mas se você movê-las como estão, o conteúdo a ser desenhado na textura de renderização também será exibido na tela principal, para que as camadas não sejam desenhadas separadamente.

Primeiro, selecione "Editar camada" na camada no canto superior direito do editor.

O nome e a localização são arbitrários, mas aqui vamos adicionar uma nova RenderTarget camada chamada .

Depois de adicionar a camada, abra a cena para a textura de renderização, selecione todos os objetos que deseja desenhar e altere o valor da camada para o que você acabou de criar RenderTarget .

SampleSceneTexture Isso encerrará a edição da cena, então salve-a.

Exibindo texturas de renderização

SampleScene Depois de abrir uma cena, adicione-a à hierarquia SampleSceneTexture arrastando e soltando a cena. Em seguida, deve haver duas cenas na hierarquia, e o conteúdo da cena deve ser exibido na SampleSceneTexture tela.

SampleSceneTexture O conteúdo da cena é perturbador, então clique no ícone de olho da cena na SampleSceneTexture hierarquia. SampleSceneTexture Isso ocultará os objetos na cena e apenas o conteúdo da cena será SampleScene visível. A propósito, como todas as configurações de textura de renderização foram concluídas,SampleScene o conteúdo da textura de renderização deve ser exibido na imagem bruta colocada na cena.

No entanto, o ícone de ocultação pelo olho é apenas uma configuração para torná-lo invisível no editor, portanto, se você executar SampleSceneTexture o jogo como está, o conteúdo da cena também será exibido na tela. SampleScene Em seguida, selecione Cena Main Camera e desmarque Da máscara de RenderTarget descarte no Camera Inspetor. Isso impede que os objetos na camada sejam exibidos quando RenderTarget o jogo é executado.

Tente executar o jogo. Deve aparecer como pretendido.

Tente mover a textura de renderização

No entanto, nesse estado, é difícil saber se ele está realmente funcionando como uma textura de renderização ou simplesmente exibindo a imagem como um corte, então vamos movê-la.

O conteúdo pode ser qualquer coisa, mas aqui vamos definir o movimento para girar automaticamente o sprite. Crie um SelfRotate script e crie-o como .

Aqui, vamos incluir um processo simples de se girar pouco a pouco.

using UnityEngine;

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

Depois de criar o script, anexe mais e mais ao objeto que você deseja girar.

Em seguida, execute o jogo e veja se ele gira. Acho que você pode ver que o objeto está se movendo na textura de renderização.

Como mover várias cenas ao mesmo tempo

Aqui, criamos um exemplo simples para que tenhamos duas cenas rodando desde o início, mas em um jogo real, há muitos casos em que você tem que começar com uma única cena. Nesse caso, acho que você terá que adicionar dinamicamente cenas no início da cena para torná-la múltipla.

Consulte "Adicionando uma cena" para obter a explicação de como adicionar uma cena. Basicamente, SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); a chamada deve resolver a maioria dos problemas.

Como impedir que o conteúdo de uma textura de renderização apareça na tela principal sem usar camadas

O conteúdo da textura de renderização é exibido na tela principal porque a cena principal e a cena de textura de renderização estão no mesmo lugar. Portanto, se você mover o conteúdo da textura de renderização para um lugar que nunca é mostrado na cena principal, ele não será exibido na tela principal. Por exemplo, você pode mover um objeto de textura de renderização ou uma câmera para o local (-10000, -10000). Dessa forma, as configurações de camada são desnecessárias.

Quando você deseja completar o conteúdo de uma textura de renderização em uma cena sem dividi-la em cenas diferentes

Isso é feito usando a mesma técnica do método anterior, sem camadas. Você pode mover o conteúdo exibido pela textura de renderização para um local onde ele nunca será exibido na câmera principal. A diferença do método de separação de cenas é que você precisa colocar duas câmeras, mas fora isso, você basicamente terá as mesmas configurações que o método de separar cenas.

Se você quiser capturar conteúdo capturado de uma perspectiva diferente em um jogo 3D como uma textura de renderização

Essa dica não falava muito sobre 3D porque focava em 2D, mas a abordagem é basicamente a mesma. Como você está projetando um único espaço 3D de várias perspectivas, não precisa ter mais de duas cenas. Tudo o que você precisa fazer é colocar quantas câmeras precisar, definir o destino do desenho como a textura de renderização e definir onde exibir a textura de renderização.