Използване на текстури за рендиране, за да се покаже съдържанието на друга сцена като текстури

Страницата се актуализира :
Дата на създаване на страница :

Среда за проверка

Уиндоус
  • Прозорци 11
Редактор на единство
  • 2021.3.3f1
Пакет на входната система
  • 1.3.0

Предпоставки за този съвет

Следните настройки са направени предварително като предпоставка за описанието на този съвет.

Отначало

Рендирането на текстури ви позволява да пишете рисунките си в текстура вместо на екрана. Това ви позволява свободно да генерирате текстури по време на изпълнение на играта, без предварително да подготвяте текстурни изображения.

Можете също така да пишете на рендерна текстура, която се променя динамично всеки кадър, например, за да прожектирате различно изображение от основната камера на дисплей, който съществува в играта.

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

Когато използвате текстура на рендиране, не е нужно да подготвяте изображение, но можете да го подготвите като образец, за да направите резултата от рисуването по-лесен за разбиране.

Създаване на текстура на рендиране

Създайте актив от проекта. От Създаване изберете Рендиране на текстура.

Името може да бъде произволно. Тъй като името не е посочено директно отвън NewRenderTexture в този момент, оставете като .

Изберете текстурата на рендиране и задайте нейния размер от инспектора. Тъй като текстурата на рендиране е област за рисуване, трябва да зададете размер. Този път искам да напиша сцена, създадена отделно, затова зададох съотношението на страните на 16:9.

Задаване на местоназначението на текстурата на рендиране

Изберете "UI" > "Raw Image" от йерархията на сцената, която първоначално е създадена. Показване на съдържанието на текстурата на рендиране в този обект. Това е обект на потребителския интерфейс, но това, от което се нуждаете, е компонент "Raw Image", който може да бъде настроен на друг обект.

Изображението на RawImage е поставено. Тъй като това е обект на потребителския интерфейс, той е поставен в платно. Все още не съм поставил нищо, така че просто получавам бял правоъгълник.

Искаме мащабът да е равен един на друг, затова задаваме размерът на обекта RawImage да бъде същият като текстурата на рендирането. Ако запазите пропорциите същите, резултатът от чертежа ще бъде мащабиран само ако промените размера, но ако промените пропорциите, резултатът от чертежа ще бъде смачкан вертикално или хоризонтално.

Компонентът Raw Image на обекта RawImage има "текстура", така че задайте текстурата на рендирането, която току-що създадохте там. Съдържанието на текстурата на рендиране е все още празно, така че те са прозрачни в изгледа.

Създаване на сцена на рендиране на текстурно съдържание

След това създайте нова сцена, за да създадете съдържанието, което да бъде начертано в текстурата на рендирането. Изберете Файл от менюто и изберете Нова сцена.

Тъй като тази проба е 2D, ще изберете и 2D сцена.

Създайте го в папката "Сцена". SampleSceneTexture Оставете името като .

След като създадете сцената, поставете обектите по подходящ начин. Всичко, което трябва да направите, е да се уверите, че знаете съдържанието на текстурата на рендера. За да се потвърди, че всичко, което излиза извън камерата, не е нарисувано, в близост до рамката на камерата се поставя и спрайт.

Ако обектите се припокриват, контекстът на обектите ще бъде неопределен, така че ако имате фон, намалете реда на фоновите слоеве.

След като изберете "MainCamera", задайте текстурата на рендера в "Целева текстура". Това води до изчертаване на чертежа в текстурата на рендирането.

Премахнете компонента Audio Listener, настроен на MainCamera. Всичко, от което се нуждаете за текстура на рендиране, е рисуване, така че не се нуждаете от аудио слушател. Ще се покаже предупреждение, ако има няколко "аудио слушатели" по време на изпълнение.

Между другото, ако стартирате сцената за текстурата на рендиране в това състояние, нищо няма да се покаже на екрана. Това е така, защото рисувате върху текстура на рендериране. Ако искате да го проверите на екрана, изтрийте "целевата текстура" и след това я изпълнете.

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

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

Първо, изберете "Редактиране на слой" от слоя в горния десен ъгъл на редактора.

Името и местоположението са произволни, но тук ще добавим нов 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 пространство от различни гледни точки, не е нужно да имате повече от две сцени. Всичко, което трябва да направите, е да поставите толкова камери, колкото ви трябват, да зададете дестинацията на чертежа като текстура на рендиране и да зададете къде да се показва текстурата на рендирането.