Utilizarea texturilor de randare pentru a afișa conținutul altei scene ca texturi

Pagina actualizată :
Data creării paginii :

Mediul de verificare

Windows
  • Ferestre 11
Unity Editor
  • 2021.3.3F1
Pachet sistem de intrare
  • 1.3.0

Cerințe preliminare pentru acest sfat

Următoarele setări au fost făcute în avans ca premisă pentru descrierea acestui sfat.

La început

Randarea texturilor vă permite să scrieți desenele pe o textură în loc de ecran. Acest lucru vă permite să generați liber texturi în timpul execuției jocului fără a pregăti imagini de textură în avans.

De asemenea, puteți scrie pe o textură de randare care modifică dinamic fiecare cadru, de exemplu, pentru a proiecta o imagine diferită de la camera principală pe un afișaj care există în joc.

Pregătirea imaginilor

Când utilizați o textură de randare, nu este necesar să pregătiți o imagine, dar o puteți pregăti ca eșantion pentru a face rezultatul desenului mai ușor de înțeles.

Crearea unei texturi de randare

Creați un activ din proiect. Din Creare, selectați Randare textură.

Numele poate fi arbitrar. Deoarece numele nu este specificat direct din NewRenderTexture exterior în acest moment, lăsați ca .

Selectați textura randării și specificați dimensiunea acesteia din Inspector. Deoarece textura randării este o zonă de desen, trebuie să specificați o dimensiune. De data aceasta, vreau să scriu o scenă creată separat, așa că am setat raportul de aspect la 16:9.

Setarea destinației texturii de randare

Selectați "UI" > "Raw Image" din ierarhia scenei create inițial. Afișați conținutul texturii de randare din acest obiect. Este un obiect al interfeței de utilizare, dar ceea ce aveți nevoie este o componentă "Raw Image", care poate fi setată la un alt obiect.

RawImage a fost plasat. Deoarece este un obiect UI, este plasat într-o Planșă. Nu am setat încă nimic, așa că primesc doar un dreptunghi alb.

Dorim ca scara să fie egală între ele, așa că setăm dimensiunea obiectului RawImage să fie aceeași cu textura randării. Dacă păstrați raportul de aspect același, rezultatul desenului va fi scalat numai dacă modificați dimensiunea, dar dacă modificați raportul de aspect, rezultatul desenului va fi zdrobit vertical sau orizontal.

Componenta Raw Image a obiectului RawImage are o "textură", deci setați textura de randare pe care tocmai ați creat-o acolo. Conținutul texturii randării este încă gol, deci este transparent în vizualizare.

Crearea unei scene de randare a texturii desenând conținut

Apoi, creați o scenă nouă pentru a crea conținutul care urmează să fie desenat în textura randării. Alegeți Fișier din meniu și selectați Scenă nouă.

Deoarece acest eșantion este 2D, veți alege și o scenă 2D.

Creați-l în folderul Scenă. SampleSceneTexture Lăsați numele ca .

După crearea scenei, așezați obiectele în mod corespunzător. Tot ce trebuie să faceți este să vă asigurați că știți conținutul texturii de randare. Pentru a confirma că orice iese în afara camerei nu este desenat, un personaj este, de asemenea, plasat lângă cadrul camerei.

Dacă obiectele se suprapun, contextul obiectelor va fi nedeterminat, deci dacă aveți un fundal, reduceți ordinea straturilor de fundal.

După selectarea "MainCamera", setați textura randării în "Textura țintă". Acest lucru face ca desenul să fie desenat în textura randării.

Eliminați componenta Ascultător audio setată la camera principală. Tot ce aveți nevoie pentru o textură de randare este desenul, deci nu aveți nevoie de ascultător audio. Un avertisment va fi afișat dacă există mai mulți "ascultători audio" în timpul rulării.

Apropo, dacă rulați scena pentru textura de randare în această stare, nimic nu va fi afișat pe ecran. Acest lucru se datorează faptului că desenați pe o textură de randare. Dacă doriți să o verificați pe ecran, ștergeți "textura țintă" și apoi executați-o.

Setări strat

În acest eșantion, va trebui să mutați două scene în același timp, dar dacă le mutați așa cum sunt, conținutul care urmează să fie desenat în textura randării va fi afișat și pe ecranul principal, astfel încât straturile nu vor fi desenate separat.

Mai întâi, selectați "Editați stratul" din stratul din colțul din dreapta sus al editorului.

Numele și locația sunt arbitrare, dar aici vom adăuga un nou RenderTarget strat numit .

După adăugarea stratului, deschideți scena pentru textura de randare, selectați toate obiectele pe care doriți să le desenați și modificați valoarea stratului la cea pe care tocmai ați creat-o RenderTarget .

SampleSceneTexture Acest lucru va încheia editarea scenei, așa că vă rugăm să o salvați.

Afișarea texturilor de randare

SampleScene După ce ați deschis o scenă, adăugați-o la ierarhie SampleSceneTexture glisând și fixând scena. Apoi, ar trebui să existe două scene în ierarhie, iar conținutul scenei ar trebui să fie afișat pe SampleSceneTexture ecran.

SampleSceneTexture Conținutul scenei este deranjant, deci faceți clic pe pictograma ochi a scenei din ierarhie SampleSceneTexture . SampleSceneTexture Acest lucru va ascunde obiectele din scenă și numai conținutul scenei va SampleScene fi vizibil. Apropo, din moment ce toate setările texturii de randare au fost finalizate,SampleScene conținutul texturii de randare ar trebui să fie afișat în imaginea brută plasată în scenă.

Cu toate acestea, ascunderea pictogramei de ochi este doar o setare pentru a o face invizibilă pe editor, deci dacă rulați SampleSceneTexture jocul așa cum este, conținutul scenei va fi afișat și pe ecran. SampleScene Apoi selectați Scenă Main Camera și debifați Din mască de RenderTarget sacrificare în inspector.Camera Acest lucru împiedică afișarea obiectelor din strat atunci când RenderTarget rulează jocul.

Încercați să rulați jocul. Ar trebui să apară așa cum se intenționează.

Încercați să mutați textura de randare

Cu toate acestea, în această stare, este dificil să știm dacă funcționează într-adevăr ca o textură de randare sau pur și simplu afișează imaginea ca o decupare, așa că haideți să o mutăm.

Conținutul poate fi orice, dar aici vom seta mișcarea pentru a roti automat sprite-ul. Creați un SelfRotate script și creați-l ca .

Aici, vom include un proces simplu de rotire puțin câte puțin.

using UnityEngine;

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

După crearea scriptului, atașați din ce în ce mai mult la obiectul pe care doriți să îl rotiți.

Apoi rulați jocul și vedeți dacă se învârte. Cred că puteți vedea că obiectul se mișcă în textura randării.

Cum să mutați mai multe scene în același timp

Aici, am creat un exemplu simplu, astfel încât să avem două scene care rulează de la început, dar într-un joc real, există multe cazuri în care trebuie să începeți cu o singură scenă. În acest caz, cred că va trebui să adăugați dinamic scene la începutul scenei pentru a face mai multe scene.

Consultați "Adăugarea unei scene" pentru explicația modului de adăugare a unei scene. Practic, SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); apelarea ar trebui să rezolve majoritatea problemelor.

Cum să împiedicați apariția conținutului unei texturi de randare pe ecranul principal fără a utiliza straturi

Conținutul texturii de randare este afișat pe ecranul principal, deoarece scena principală și scena texturii de randare se află în același loc. Prin urmare, dacă mutați conținutul texturii de randare într-un loc care nu este afișat niciodată în scena principală, acesta nu va fi afișat pe ecranul principal. De exemplu, puteți muta un obiect cu textură de randare sau o cameră în locația (-10000, -10000). În acest fel, setările stratului nu sunt necesare.

Când doriți să finalizați conținutul unei texturi de randare într-o scenă fără a o împărți în scene diferite

Acest lucru se face folosind aceeași tehnică ca metoda anterioară fără straturi. Puteți muta conținutul afișat de textura randării într-un loc unde nu va fi afișat niciodată pe camera principală. Diferența față de metoda de separare a scenelor este că trebuie să plasați două camere, dar în afară de asta, veți avea practic aceleași setări ca metoda de separare a scenelor.

Dacă doriți să capturați conținut capturat dintr-o perspectivă diferită într-un joc 3D ca textură de randare

Acest sfat nu a vorbit prea mult despre 3D, deoarece s-a concentrat pe 2D, dar abordarea este în esență aceeași. Deoarece proiectați un singur spațiu 3D din mai multe perspective, nu trebuie să aveți mai mult de două scene. Tot ce trebuie să faceți este să plasați câte camere aveți nevoie, să setați destinația desenului ca textură de randare și să setați unde să afișați textura de randare.