Gunakan tekstur render untuk memaparkan kandungan adegan lain sebagai tekstur

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran pengesahan

Windows
  • Windows 11
Penyunting Perpaduan
  • 2021.3.3F1
Pakej Sistem Input
  • 1.3.0

Prasyarat untuk petua ini

Tetapan berikut telah dibuat terlebih dahulu sebagai premis untuk penerangan petua ini.

Pada mulanya

Tekstur render membolehkan anda menulis lukisan anda pada tekstur dan bukannya skrin. Ini membolehkan anda menjana tekstur secara bebas semasa pelaksanaan permainan tanpa menyediakan imej tekstur terlebih dahulu.

Anda juga boleh menulis kepada tekstur render yang berubah secara dinamik setiap bingkai, sebagai contoh, untuk memproyeksikan imej yang berbeza dari kamera utama pada paparan yang wujud dalam permainan.

Menyediakan Imej

Apabila menggunakan tekstur render, anda tidak perlu menyediakan imej, tetapi anda boleh menyediakannya sebagai sampel untuk menjadikan hasil lukisan lebih mudah difahami.

Mencipta tekstur render

Buat aset daripada projek. Daripada Cipta, pilih Render Tekstur.

Nama itu boleh sewenang-wenangnya. Oleh kerana nama itu tidak dinyatakan terus dari NewRenderTexture luar pada masa ini, biarkan sebagai .

Pilih tekstur render dan tentukan saiznya daripada Pemeriksa. Oleh kerana tekstur render adalah kawasan lukisan, anda mesti menentukan saiz. Kali ini, saya ingin menulis adegan yang dibuat secara berasingan, jadi saya menetapkan nisbah aspek kepada 16:9.

Mengesetkan destinasi tekstur render

Pilih "UI" > "Imej Mentah" daripada hierarki adegan yang pada mulanya dicipta. Paparkan kandungan tekstur render dalam objek ini. Ia adalah objek UI, tetapi apa yang anda perlukan adalah komponen "Imej Mentah", yang boleh ditetapkan kepada objek lain.

RawImage telah diletakkan. Kerana ia adalah objek UI, ia diletakkan dalam Kanvas. Saya belum menetapkan apa-apa, jadi saya hanya mendapat segi empat tepat putih.

Kami mahu skala sama antara satu sama lain, jadi kami menetapkan saiz objek RawImage sama dengan tekstur render. Jika anda mengekalkan nisbah aspek yang sama, hasil lukisan hanya akan diskalakan walaupun anda menukar saiz, tetapi jika anda menukar nisbah aspek, hasil lukisan akan dihancurkan secara menegak atau mendatar.

Komponen Imej Mentah objek RawImage mempunyai "tekstur", jadi tetapkan tekstur render yang baru sahaja anda buat di sana. Kandungan tekstur render masih kosong, jadi ia telus dalam pandangan.

Mencipta adegan memaparkan kandungan lukisan tekstur

Seterusnya, buat adegan baharu untuk mencipta kandungan yang akan dilukis dalam tekstur render. Pilih Fail daripada menu dan pilih Pemandangan Baru.

Oleh kerana sampel ini adalah 2D, anda akan memilih adegan 2D juga.

Ciptanya dalam folder Pemandangan. SampleSceneTexture Tinggalkan nama sebagai .

Selepas mencipta adegan, letakkan objek dengan sewajarnya. Apa yang anda perlu lakukan ialah memastikan anda mengetahui kandungan tekstur render. Untuk mengesahkan bahawa apa-apa yang menonjol di luar kamera tidak ditarik, sprite juga diletakkan berhampiran bingkai kamera.

Sekiranya objek bertindih, konteks objek akan tidak dapat ditentukan, jadi jika anda mempunyai latar belakang, turunkan susunan lapisan latar belakang.

Selepas memilih "MainCamera", tetapkan tekstur render dalam "Tekstur sasaran". Ini menyebabkan lukisan dilukis dalam tekstur render.

Alih keluar set komponen Pendengar Audio kepada MainCamera. Apa yang anda perlukan untuk tekstur render ialah lukisan, jadi anda tidak memerlukan Pendengar Audio. Amaran akan dipaparkan jika terdapat berbilang "Pendengar Audio" pada masa jalan.

Dengan cara ini, jika anda menjalankan adegan untuk tekstur render dalam keadaan ini, tiada apa yang akan dipaparkan pada skrin. Ini kerana anda melukis pada tekstur render. Jika anda ingin menyemaknya pada skrin, padamkan "tekstur sasaran" dan kemudian laksanakannya.

Seting lapisan

Dalam sampel ini, anda perlu memindahkan dua adegan pada masa yang sama, tetapi jika anda memindahkannya seperti sedia ada, kandungan yang akan dilukis dalam tekstur render juga akan dipaparkan pada skrin utama, jadi lapisan tidak akan ditarik secara berasingan.

Pertama, pilih "Edit Lapisan" dari lapisan di sudut kanan atas editor.

Nama dan lokasi sewenang-wenangnya, tetapi di sini kita akan menambah lapisan baru RenderTarget bernama .

Selepas menambah lapisan, buka pemandangan untuk tekstur render, pilih semua objek yang anda ingin lukis dan ubah nilai lapisan kepada yang baru anda cipta RenderTarget .

SampleSceneTexture Ini akan menamatkan penyuntingan adegan, jadi sila simpannya.

Memaparkan tekstur render

SampleScene Sebaik sahaja anda telah membuka adegan, tambahkannya pada hierarki SampleSceneTexture dengan menyeret dan melepaskan adegan. Kemudian, perlu ada dua adegan dalam hierarki, dan kandungan adegan harus dipaparkan pada SampleSceneTexture skrin.

SampleSceneTexture Kandungan adegan mengganggu, jadi klik ikon mata adegan dari SampleSceneTexture hierarki. SampleSceneTexture Ini akan menyembunyikan objek di tempat kejadian dan hanya kandungan adegan SampleScene akan kelihatan. Dengan cara ini, kerana semua tetapan tekstur render telah selesai,SampleScene kandungan tekstur render harus dipaparkan dalam imej mentah yang diletakkan di tempat kejadian.

Walau bagaimanapun, ikon bersembunyi di tepi mata hanyalah tetapan untuk menjadikannya tidak kelihatan pada editor, jadi jika anda menjalankan SampleSceneTexture permainan seperti itu, kandungan adegan itu juga akan dipaparkan pada skrin. SampleScene Kemudian pilih Adegan Main Camera dan nyahtanda RenderTarget Dari Topeng Pemusnahan dalam Camera Pemeriksa. Ini menghalang objek dalam lapisan daripada dipaparkan apabila RenderTarget permainan berjalan.

Cuba jalankan permainan. Ia sepatutnya muncul seperti yang dimaksudkan.

Cuba gerakkan tekstur render

Walau bagaimanapun, dalam keadaan ini, sukar untuk mengetahui sama ada ia benar-benar berfungsi sebagai tekstur render atau hanya memaparkan imej sebagai tanaman, jadi mari kita gerakkannya.

Kandungannya boleh menjadi apa-apa, tetapi di sini kita akan menetapkan pergerakan untuk memutar sprite secara automatik. SelfRotate Buat skrip dan buat sebagai .

Di sini, kami akan memasukkan proses mudah berputar sendiri sedikit demi sedikit.

using UnityEngine;

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

Selepas mencipta skrip, lampirkan lebih banyak lagi pada objek yang anda ingin putar.

Kemudian jalankan permainan dan lihat sama ada ia berputar. Saya fikir anda dapat melihat bahawa objek itu bergerak dalam tekstur render.

Bagaimana untuk memindahkan berbilang adegan pada masa yang sama

Di sini, kami mencipta contoh mudah supaya kami mempunyai dua adegan yang berjalan dari awal, tetapi dalam permainan sebenar, terdapat banyak kes di mana anda perlu bermula dengan satu adegan. Dalam kes itu, saya fikir anda perlu menambah adegan secara dinamik pada permulaan adegan untuk menjadikannya berbilang adegan.

Sila rujuk "Menambah adegan" untuk penjelasan tentang cara menambah adegan. Pada asasnya, SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive); panggilan harus menyelesaikan kebanyakan masalah.

Bagaimana untuk mengelakkan kandungan tekstur render daripada muncul di skrin utama tanpa menggunakan lapisan

Kandungan tekstur render dipaparkan pada skrin utama kerana adegan utama dan adegan tekstur render berada di tempat yang sama. Oleh itu, jika anda memindahkan kandungan tekstur render ke tempat yang tidak pernah ditunjukkan dalam adegan utama, ia tidak akan dipaparkan pada skrin utama. Sebagai contoh, anda boleh mengalihkan objek tekstur render atau kamera ke lokasi (-10000, -10000). Dengan cara ini, tetapan lapisan tidak perlu.

Apabila anda ingin melengkapkan kandungan tekstur render dalam satu adegan tanpa membahagikannya kepada adegan yang berbeza

Ini dilakukan menggunakan teknik yang sama seperti kaedah sebelumnya tanpa lapisan. Anda boleh mengalihkan kandungan yang dipaparkan dengan tekstur render ke tempat di mana ia tidak akan dipaparkan pada kamera utama. Perbezaan dari kaedah memisahkan adegan adalah bahawa anda perlu meletakkan dua kamera, tetapi selain itu, anda pada dasarnya akan mempunyai tetapan yang sama seperti kaedah memisahkan adegan.

Jika anda ingin menangkap kandungan yang ditangkap dari perspektif yang berbeza dalam permainan 3D sebagai tekstur render

Petua ini tidak banyak bercakap mengenai 3D kerana ia memberi tumpuan kepada 2D, tetapi pendekatannya pada dasarnya sama. Oleh kerana anda memproyeksikan ruang 3D tunggal dari pelbagai perspektif, anda tidak perlu mempunyai lebih daripada dua adegan. Apa yang anda perlu lakukan ialah meletakkan seberapa banyak kamera yang anda perlukan, tetapkan destinasi lukisan sebagai tekstur render, dan tetapkan tempat untuk memaparkan tekstur render.