Utiliser des textures de rendu pour afficher le contenu d’une autre scène sous forme de textures

Page mise à jour :
Date de création de la page :

Environnement de vérification

Windows
  • Fenêtres 11
Éditeur Unity
  • 2021.3.3f1
Package système d’entrée
  • 1.3.0

Conditions préalables à cette astuce

Les paramètres suivants ont été définis à l’avance comme prémisse pour la description de cette astuce.

Au début

Les textures de rendu vous permettent d’écrire vos dessins sur une texture au lieu de l’écran. Cela vous permet de générer librement des textures pendant l’exécution du jeu sans préparer d’images de texture à l’avance.

Vous pouvez également écrire dans une texture de rendu qui change dynamiquement chaque image, par exemple, pour projeter une image différente de la caméra principale sur un écran qui existe dans le jeu.

Préparation des images

Lorsque vous utilisez une texture de rendu, vous n’avez pas besoin de préparer une image, mais vous pouvez la préparer en tant qu’exemple pour faciliter la compréhension du résultat du dessin.

Création d’une texture de rendu

Créez une ressource à partir du projet. Dans Créer, sélectionnez Texture de rendu.

Le nom peut être arbitraire. Étant donné que le nom n’est pas spécifié directement de l’extérieur pour le NewRenderTexture moment, laissez .

Sélectionnez la texture de rendu et spécifiez sa taille dans l’inspecteur. La texture de rendu étant une zone de dessin, vous devez spécifier une taille. Cette fois, je veux écrire une scène créée séparément, donc j’ai réglé le format d’image sur 16:9.

Définition de la destination de texture de rendu

Sélectionnez « UI » > « Image brute » dans la hiérarchie de la scène initialement créée. Affichez le contenu de la texture de rendu dans cet objet. Il s’agit d’un objet de l’interface utilisateur, mais ce dont vous avez besoin est un composant « Image brute », qui peut être défini sur un autre objet.

La RawImage a été placée. Comme il s’agit d’un objet d’interface utilisateur, il est placé dans un canevas. Je n’ai encore rien défini, alors j’obtiens juste un rectangle blanc.

Nous voulons que l’échelle soit égale les unes aux autres, c’est pourquoi nous définissons la taille de l’objet RawImage pour qu’elle soit identique à la texture de rendu. Si vous conservez le même rapport hauteur/largeur, le résultat du dessin ne sera mis à l’échelle que si vous modifiez la taille, mais si vous modifiez le rapport hauteur/largeur, le résultat du dessin sera écrasé verticalement ou horizontalement.

Le composant Raw Image de l’objet RawImage a une « texture », définissez donc la texture de rendu que vous venez d’y créer. Le contenu de la texture de rendu est toujours vide, il est donc transparent dans la vue.

Création d’une scène de contenu de dessin de texture de rendu

Ensuite, créez une nouvelle scène pour créer le contenu à dessiner dans la texture de rendu. Choisissez Fichier dans le menu et sélectionnez Nouvelle scène.

Étant donné que cet exemple est 2D, vous choisirez également une scène 2D.

Créez-le dans le dossier Scène. SampleSceneTexture Conservez le nom .

Après avoir créé la scène, placez les objets de manière appropriée. Tout ce que vous avez à faire est de vous assurer que vous connaissez le contenu de la texture de rendu. Afin de confirmer que tout ce qui dépasse de l’extérieur de la caméra n’est pas dessiné, un sprite est également placé près du cadre de la caméra.

Si les objets se chevauchent, le contexte des objets sera indéterminé, donc si vous avez un arrière-plan, réduisez l’ordre des calques d’arrière-plan.

Après avoir sélectionné « MainCamera », définissez la texture de rendu dans « Texture cible ». Cela entraîne le dessin à dessiner dans la texture de rendu.

Supprimez le composant Audio Listener défini sur MainCamera. Tout ce dont vous avez besoin pour une texture de rendu est le dessin, vous n’avez donc pas besoin de l’écouteur audio. Un avertissement s’affiche s’il y a plusieurs « écouteurs audio » au moment de l’exécution.

Soit dit en passant, si vous exécutez la scène pour la texture de rendu dans cet état, rien ne sera affiché à l’écran. Cela est dû au fait que vous dessinez sur une texture de rendu. Si vous souhaitez le vérifier à l’écran, supprimez la « texture cible », puis exécutez-la.

Paramètres de calque

Dans cet exemple, vous devrez déplacer deux scènes en même temps, mais si vous les déplacez telles quelles, le contenu à dessiner dans la texture de rendu sera également affiché sur l’écran principal, de sorte que les calques ne seront pas dessinés séparément.

Tout d’abord, sélectionnez « Modifier le calque » dans le calque dans le coin supérieur droit de l’éditeur.

Le nom et l’emplacement sont arbitraires, mais ici nous allons ajouter une nouvelle RenderTarget couche nommée .

Après avoir ajouté le calque, ouvrez la scène pour la texture de rendu, sélectionnez tous les objets à dessiner et remplacez la valeur du calque par celle que vous venez de créer RenderTarget .

SampleSceneTexture Cela mettra fin à l’édition de la scène, veuillez donc l’enregistrer.

Affichage des textures de rendu

SampleScene Une fois que vous avez ouvert une scène, ajoutez-la à la hiérarchie SampleSceneTexture en la faisant glisser-déposer. Ensuite, il devrait y avoir deux scènes dans la hiérarchie et le contenu de la scène devrait être affiché à l’écran SampleSceneTexture .

SampleSceneTexture Le contenu de la scène est dérangeant, alors cliquez sur l’icône en forme d’œil de la scène dans la SampleSceneTexture hiérarchie. SampleSceneTexture Cela masquera les objets de la scène et seul le contenu de la scène SampleScene sera visible. Soit dit en passant, puisque tous les paramètres de texture de rendu ont été complétés,SampleScene le contenu de la texture de rendu doit être affiché dans l’image brute placée dans la scène.

Cependant, l’icône masquée par l’œil n’est qu’un paramètre pour le rendre invisible sur l’éditeur, donc si vous exécutez SampleSceneTexture le jeu tel quel, le contenu de la scène sera également affiché à l’écran. SampleScene Sélectionnez ensuite Scène Main Camera et décochez Du masque d’abattage RenderTarget dans l’inspecteurCamera. Cela empêche les objets de la couche d’être affichés lors RenderTarget de l’exécution du jeu.

Essayez de lancer le jeu. Il devrait apparaître comme prévu.

Essayez de déplacer la texture de rendu

Cependant, dans cet état, il est difficile de savoir si cela fonctionne vraiment comme une texture de rendu ou simplement afficher l’image en tant que recadrage, alors déplaçons-la.

Le contenu peut être n’importe quoi, mais ici, nous allons régler le mouvement pour faire pivoter automatiquement le sprite. Créez un SelfRotate script et créez-le en tant que .

Ici, nous allons inclure un processus simple de rotation petit à petit.

using UnityEngine;

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

Après avoir créé le script, attachez-le de plus en plus à l’objet que vous souhaitez faire pivoter.

Ensuite, lancez le jeu et voyez s’il tourne. Je pense que vous pouvez voir que l’objet se déplace dans la texture de rendu.

Comment déplacer plusieurs scènes en même temps

Ici, nous avons créé un exemple simple pour que nous ayons deux scènes en cours depuis le début, mais dans un vrai jeu, il y a de nombreux cas où vous devez commencer avec une seule scène. Dans ce cas, je pense que vous devrez ajouter dynamiquement des scènes au début de la scène pour en faire plusieurs scènes.

Veuillez vous référer à « Ajout d’une scène » pour l’explication de la façon d’ajouter une scène. Fondamentalement, SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); appeler devrait résoudre la plupart des problèmes.

Comment empêcher le contenu d’une texture de rendu d’apparaître sur l’écran principal sans utiliser de calques

Le contenu de la texture de rendu est affiché sur l’écran principal car la scène principale et la scène de texture de rendu se trouvent au même endroit. Par conséquent, si vous déplacez le contenu de la texture de rendu vers un emplacement qui n’est jamais affiché dans la scène principale, il ne sera pas affiché sur l’écran principal. Par exemple, vous pouvez déplacer un objet de texture de rendu ou une caméra vers l’emplacement (-10000, -10000). De cette façon, les paramètres de calque ne sont pas nécessaires.

Lorsque vous souhaitez compléter le contenu d’une texture de rendu dans une scène sans la diviser en différentes scènes

Ceci est fait en utilisant la même technique que la méthode précédente sans couches. Vous pouvez déplacer le contenu affiché par la texture de rendu vers un endroit où il ne sera jamais affiché sur la caméra principale. La différence avec la méthode de séparation des scènes est que vous devez placer deux caméras, mais à part cela, vous aurez essentiellement les mêmes paramètres que la méthode de séparation des scènes.

Si vous souhaitez capturer du contenu capturé sous un angle différent dans un jeu 3D en tant que texture de rendu

Cette astuce ne parlait pas beaucoup de la 3D car elle se concentrait sur la 2D, mais l’approche est fondamentalement la même. Étant donné que vous projetez un seul espace 3D à partir de plusieurs perspectives, vous n’avez pas besoin d’avoir plus de deux scènes. Tout ce que vous avez à faire est de placer autant de caméras que nécessaire, de définir la destination du dessin comme texture de rendu et de définir où afficher la texture de rendu.