Используйте текстуры рендеринга для отображения содержимого другой сцены в виде текстур

Страница обновлена :
Дата создания страницы :

Среда верификации

Виндоус
  • Windows 11
Редактор Unity
  • 2021.3.3f1
Входной системный пакет
  • 1.3.0

Предпосылки для этого совета

Следующие настройки были сделаны заранее в качестве предпосылки для описания этого совета.

Сначала

Текстуры рендеринга позволяют записывать рисунки в текстуру, а не на экран. Это позволяет свободно генерировать текстуры во время выполнения игры без предварительной подготовки текстурных изображений.

Вы также можете записать текстуру рендеринга, которая динамически изменяется каждый кадр, например, чтобы проецировать изображение, отличное от основной камеры, на дисплей, существующий в игре.

Подготовка изображений

При использовании текстуры рендеринга вам не нужно готовить изображение, но вы можете подготовить его в качестве образца, чтобы сделать результат рисования более понятным.

Создание текстуры рендеринга

Создайте ресурс из проекта. В разделе «Создать» выберите «Рендеринг текстуры».

Имя может быть произвольным. Поскольку в настоящее время имя не указывается непосредственно извне NewRenderTexture , оставьте как .

Выберите текстуру рендеринга и укажите ее размер в инспекторе. Поскольку текстура рендеринга представляет собой область рисования, необходимо указать размер. На этот раз я хочу написать сцену, созданную отдельно, поэтому я установил соотношение сторон 16:9.

Задание места назначения текстуры рендеринга

Выберите «Пользовательский интерфейс» > «Необработанное изображение» из иерархии изначально созданной сцены. Отобразите содержимое текстуры рендеринга в этом объекте. Это объект пользовательского интерфейса, но вам нужен компонент «Необработанное изображение», который можно установить на другой объект.

Файл RawImage был размещен. Так как это объект пользовательского интерфейса, он помещается в Canvas. Я еще ничего не установил, поэтому просто получаю белый прямоугольник.

Мы хотим, чтобы масштабы были равны друг другу, поэтому мы устанавливаем размер объекта RawImage таким же, как и текстура рендеринга. Если вы оставите пропорции прежними, результат рисования будет масштабироваться только при изменении размера, но если вы измените пропорции, результат рисования будет раздроблен по вертикали или горизонтали.

Компонент Raw Image объекта RawImage имеет «текстуру», поэтому установите там только что созданную текстуру рендеринга. Содержимое текстуры рендеринга по-прежнему пустое, поэтому оно прозрачно в представлении.

Создание сцены рисования текстуры рендеринга содержимого

Затем создайте новую сцену, чтобы создать содержимое, которое будет отображаться в текстуре рендеринга. Выберите «Файл» в меню и выберите «Новая сцена».

Поскольку этот образец является 2D, вы также выберете 2D-сцену.

Создайте его в папке Scene. SampleSceneTexture Оставьте имя как .

После создания сцены разместите объекты соответствующим образом. Все, что вам нужно сделать, это убедиться, что вы знаете содержимое текстуры рендеринга. Чтобы подтвердить, что все, что выступает за пределы камеры, не нарисовано, рядом с рамкой камеры также помещается спрайт.

Если объекты перекрываются, контекст объектов будет неопределенным, поэтому, если у вас есть фон, уменьшите порядок фоновых слоев.

После выбора «MainCamera» установите текстуру рендеринга в поле «Целевая текстура». Это приводит к тому, что рисунок рисуется в текстуре рендеринга.

Удалите компонент Audio Listener, для которого установлено значение MainCamera. Все, что вам нужно для текстуры рендеринга, — это рисование, поэтому вам не нужен Audio Listener. Предупреждение будет отображаться, если во время выполнения есть несколько «Аудиослушателей».

Кстати, если запустить сцену для рендера текстуры в таком состоянии, то на экране ничего не отобразится. Это связано с тем, что вы рисуете текстуру рендеринга. Если вы хотите проверить это на экране, удалите «целевую текстуру», а затем выполните ее.

Настройки слоя

В этом примере вам придется перемещать две сцены одновременно, но если вы переместите их как есть, содержимое, которое будет отрисовано в текстуре рендеринга, также будет отображаться на главном экране, поэтому слои не будут рисовать отдельно.

Сначала выберите «Редактировать слой» из слоя в правом верхнем углу редактора.

Имя и местоположение произвольны, но здесь мы добавим новый RenderTarget слой с именем .

После добавления слоя откройте сцену для текстуры рендеринга, выберите все объекты, которые вы хотите нарисовать, и измените значение слоя на то, которое вы только что создали RenderTarget .

SampleSceneTexture На этом редактирование сцены закончится, поэтому, пожалуйста, сохраните ее.

Отображение текстур рендеринга

SampleScene После того, как вы открыли сцену, добавьте ее в иерархию SampleSceneTexture , перетащив сцену. Затем в иерархии должно быть две сцены, и содержимое сцены должно отображаться на SampleSceneTexture экране.

SampleSceneTexture Содержимое сцены вызывает беспокойство, поэтому щелкните значок глаза сцены в SampleSceneTexture иерархии. SampleSceneTexture Это скроет объекты в сцене, и будет видно только содержимое сцены SampleScene . Кстати, поскольку все настройки текстуры рендера выполнены, содержимое текстуры рендеринга должно отображаться в необработанном изображении,SampleScene размещенном в сцене.

Однако значок скрытия глазом - это только настройка, чтобы сделать его невидимым в редакторе, поэтому, если вы запустите SampleSceneTexture игру как есть, содержимое сцены также будет отображаться на экране. SampleScene Затем выберите «Сцена» и снимите флажок «Main CameraИз RenderTarget маски отбраковки» в инспектореCamera. Это предотвращает отображение объектов в слое во время RenderTarget запуска игры.

Попробуйте запустить игру. Он должен выглядеть так, как задумано.

Попробуйте переместить текстуру рендеринга

Однако в этом состоянии трудно понять, действительно ли он работает как текстура рендеринга или просто отображает изображение как обрезку, поэтому давайте переместим его.

Контент может быть любым, но здесь мы настроим движение на автоматический поворот спрайта. Создайте сценарий SelfRotate и создайте его как .

Здесь мы включим простой процесс вращения самого себя понемногу.

using UnityEngine;

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

После создания скрипта прикрепляйте все больше и больше к объекту, который вы хотите повернуть.

Затем запустите игру и посмотрите, будет ли она вращаться. Я думаю, вы можете видеть, что объект движется в текстуре рендеринга.

Как перемещать несколько сцен одновременно

Здесь мы создали простой пример, чтобы у нас было две сцены, запущенные с самого начала, но в реальной игре есть много случаев, когда вам нужно начинать с одной сцены. В этом случае, я думаю, вам придется динамически добавлять сцены в начале сцены, чтобы сделать ее несколько сцен.

Пожалуйста, обратитесь к разделу «Добавление сцены» для объяснения того, как добавить сцену. В принципе, SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); звонок должен решить большинство проблем.

Как предотвратить появление содержимого текстуры рендеринга на главном экране без использования слоев

Содержимое текстуры рендеринга отображается на главном экране, так как основная сцена и сцена рендеринга текстуры находятся в одном месте. Поэтому, если переместить содержимое текстуры рендеринга в место, которое никогда не показывается в основной сцене, оно не будет отображаться на главном экране. Например, можно переместить текстурный объект рендеринга или камеру в расположение (-10000, -10000). Таким образом, настройки слоя не нужны.

Если вы хотите завершить содержимое текстуры рендеринга в одной сцене, не разделяя ее на разные сцены

Делается это по той же методике, что и предыдущий способ без слоев. Вы можете переместить контент, отображаемый текстурой рендеринга, в место, где он никогда не будет отображаться на основной камере. Отличие от метода разделения сцен заключается в том, что вам нужно разместить две камеры, но в остальном у вас будут те же настройки, что и у метода разделения сцен.

Если вы хотите захватить контент, снятый с другой точки зрения в 3D-игре, в виде текстуры рендеринга

В этом совете мало говорилось о 3D, потому что он был сосредоточен на 2D, но подход в основном тот же. Поскольку вы проецируете одно 3D-пространство с разных точек зрения, вам не нужно иметь более двух сцен. Все, что вам нужно сделать, это разместить столько камер, сколько вам нужно, установить место назначения рисования в качестве текстуры рендеринга и указать, где отображать текстуру рендеринга.