The Asset Database
Batching dengan AssetDatabase

Refreshing the Asset Database

Unity menyegarkan Database Aset dalam situasi berikut:

  • Ketika fokus Regains Editor Unity (jika Anda telah mengaktifkan Auto-Refresh di jendela Preferensi)
  • Saat Anda memilih Assets > Refresh dari menu
  • Ketika Anda memanggil AssetDatabase.Refresh dari C#

Beberapa API Aset lain memicu Refresh() tetapi hanya untuk Aset yang Anda tentukan. Contoh CreateAsset() dan ImportAsset().

Unity melakukan langkah-langkah berikut selama Database Aset segar:

  1. Hal ini terlihat untuk perubahan pada file Aset, dan kemudian memperbarui Database Aset Sumber
  2. Ini mengimpor dan mengkompilasi file terkait kode seperti .dll, .asmdef, .asmref, .rsp, dan file .cs.
  3. Kemudian reloads domain, jika Refresh tidak divokasi dari skrip.
  4. Ini memproses semua aset untuk file terkait kode impor
  5. Kemudian impor aset yang terkait dengan kode dan pasca proses semua aset impor yang tersisa
  6. Kemudian reload panas Aset

Aset Database

Unity melakukan langkah-langkah yang dijelaskan di bagian sebelumnya selama Aset Database refresh. Bagian ini menjelaskan proses ini secara lebih rinci. Langkah-langkah ini terjadi di dalam lingkaran, dan beberapa langkah mungkin menyebabkan proses refresh untuk restart (misalnya, jika mengimpor Aset menciptakan Aset lain yang Unity juga perlu impor).

Unity restart loop refresh database Asset di bawah kondisi berikut:

  • Jika, setelah impor, file yang digunakan importir telah berubah pada disk.
  • Jika, di OnPostProcess AllAssets, Anda menyebut salah satu berikut:
    • Sitemap Database API yang memanjang Refresh tambahan, seperti MoveAsset, CreateAsset dan ImportAsset
  • Jika timestamp dari file yang sedang diimpor perubahan sementara itu diimpor, file diqueued untuk re-import
  • Ketika importir membuat file di tengah impor (misalnya, model FBX dapat restart Refresh dengan mengekstrak Tekstur mereka dari model).

Lihat perubahan pada disk

Ketika Unity mencari perubahan pada disk, itu memindai folder Assets dan Packages di Anda Proyek untuk memeriksa apakah file apa pun telah ditambahkan, dimodifikasi, atau dihapus sejak pemindaian terakhir. Ini mengumpulkan perubahan dalam daftar untuk memproses dalam langkah berikutnya.

Update source Asset Database

Setelah Unity mengumpulkan daftar file, kemudian mendapatkan hashe file untuk file yang telah ditambahkan atau dimodifikasi. Ini kemudian memperbarui Database Aset dengan GUID untuk file-file tersebut, dan menghapus entri untuk file yang terdeteksi sebagai dihapus.

Pelacakan ketergantungan

Aset Database melacak dua jenis dependensi aset: static dependencies dan dynamic dependencies. Jika ada ketergantungan perubahan Aset, Unity memicu reimpor aset itu.

Ketergantungan statis

Ketergantungan statis adalah nilai, pengaturan atau properti yang diimpor tergantung pada. Ketergantungan statis dikenal sebelum Aset diimpor, dan tidak dipengaruhi oleh perilaku importir selama proses impor. Jika ketergantungan statis dari perubahan Aset, Transportasi ulang Unity yang Aset.

Beberapa ketergantungan statis umum adalah:

  • Nama Aset
  • ID importir yang terkait dengan Aset
  • Versi importir
  • Saat ini memilih membangun platform target
Ketergantungan dinamis

Unity biasanya menemukan ketergantungan dinamis aset selama proses impor. Ini karena ketergantungan ini didefinisikan oleh konten aset sumber. Sebagai contoh, ShaderProgram yang berjalan di GPU. More info
Lihat di Glossary
dapat merujuk Shader lain, dan PrefabJenis aset yang memungkinkan Anda untuk menyimpan GameObject lengkap dengan komponen dan properti. Prefab bertindak sebagai template dari mana Anda dapat membuat instance objek baru di tempat kejadian. More info
Lihat di Glossary
mungkin tergantung pada Prefab lain.

Importir mungkin juga menggunakan state global berdasarkan konten aset sumber, dalam hal itu juga menjadi ketergantungan dinamis. Contoh ini adalah platform target, ruang warna Proyek, API grafis, versi runtime scripting, atau state compressionMetode menyimpan data yang mengurangi jumlah ruang penyimpanan yang dibutuhkan. Kompresi Tekstur, Kompresi Animasi, Kompresi Audio, Membangun Kompresi.
Lihat di Glossary
Tekstur.

Unity menyimpan ketergantungan dinamis aset dalam Aset Impor Konteks.

Mengimpor dan menyusun file terkait kode

Dalam daftar file yang berubah atau ditambahkan, Unity mengumpulkan yang berkaitan dengan kode, dan mengirimkannya ke pipa kompilasi skrip. compiler menghasilkan rakitan dari file skrip dan file definisi perakitan di Proyek Anda. Untuk informasi lebih lanjut tentang langkah ini, lihat dokumentasi di .

Muat ulang domain

Jika Unity mendeteksi perubahan skrip, isi ulang domain C#. Hal ini karena pengimpor Scripted baru dapat diciptakan, dan logika mereka berpotensi dapat mempengaruhi hasil impor aset dalam antrian Refresh. Langkah ini restart Refresh() untuk memastikan pengelola Scripted baru mengambil efek.

Aset terkait non-kode impor

Setelah Unity mengimpor semua aset terkait kode dan memuat ulang domain, kemudian bergerak ke Aset yang tersisa. Sitemap Proses impor aset yang jenis aset, dan mengidentifikasi jenis file yang harus diimpor berdasarkan ekstensi nama file. Misalnya, TextureImporter bertanggung jawab untuk mengimpor .jpg, .png dan .psd file, antara lain.

Ada dua jenis importir:

Proses unity semua importir asli pertama, dan kemudian semua importir skrip dalam fase terpisah.

Ketika importir mengimpor file aset, Unity menghasilkan AssetImportContext. AsetImportContext melaporkan Ketergantungan Statis aset.

Juga, selama langkah impor, ada sejumlah callback yang terjadi.

Impor Aset Preprocess Sitemap

Postprocess Asset Importir Panggilan:

Satu panggilan pemrosesan pasca akhir yang dipicu setelah semua impor selesai.

Ada sejumlah hal yang dapat terjadi yang akan me-restart proses refresh pada folder Aset, beberapa dari mereka menjadi:

  • Jika impor aset gagal

  • Jika aset dimodifikasi selama fase impor Refresh. Sebagai contoh, jika file dalam daftar akan dimodifikasi sehingga tanggal modifikasinya tidak apa yang ada dalam refresh sebelumnya. Ini dapat terjadi jika Anda mulai menarik file dari sistem Version ControlSistem untuk mengelola perubahan file. Anda dapat menggunakan Unity bersama dengan alat kontrol versi yang paling umum, termasuk Perforce, Git, Mercurial dan PlasticSCM. More info
    Lihat di Glossary
    sementara Editor memiliki fokus.

  • Jika Aset menciptakan aset lain selama impor. Contoh: Ketika mengimpor FBX, tekstur dapat diekstrak dari FBX dan ditempatkan ke proyek, dan ini berarti bahwa Unity harus mengimpor tekstur (dan setiap artefak yang mereka hasilkan).

  • Jika Anda memaksa re-import file selama salah satu callback proses pre/post atau dalam OnPostProcessAllAssets, misalnya, menggunakan AssetDatabase.ForceReserializeAssets atau AssetImport.SaveAndReimport. Catatan, Anda harus berhati-hati tidak menyebabkan loop reimport tak terbatas jika Anda melakukan ini.

  • Jika Reload Majelis terjadi setelah membandingkan scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
    Lihat di Glossary
    . Jika Anda menghasilkan file C# selama proses refresh, bahwa file baru harus dikompilasi, jadi Unity restart menyegarkan.

  • Jika Anda menyimpan aset sebagai "Satu teks" tetapi Aset harus serialisasi sebagai biner, restart akan terjadi. (Sebagai contoh, Adegan dengan Terrains di dalamnya harus di serialisasi sebagai Binary, karena data terrain akan tidak berubah jika dipandang sebagai array karakter dalam file teks.)

Reloading panas

Reloading panas mengacu pada proses di mana impor Unity dan menerapkan perubahan pada skrip dan aset saat Editor terbuka. Ini mungkin terjadi saat Editor berada di Play Mode atau di luar Play Mode. Anda tidak harus me-restart aplikasi Anda atau Editor untuk perubahan untuk mengambil efek.

Ketika Anda mengubah dan menyimpan skrip, beban panas Unity semua data skrip proyek. Toko pertama semua nilai variabel serializable di semua skrip yang dimuat, memuat ulang skrip, kemudian mengembalikan nilai. Semua data yang disimpan dalam variabel non-serializable hilang selama reload panas.

Sitemap Aset impor unity yang diimpor oleh (built-in DefaultImporter) [BuiltInImporters] pertama, dan kemudian aset skrip, sehingga tidak menyebut PostProcess yang ditentukan skrip SemuaAssets untuk aset default.Note: Unity imports assets imported by the (built-in DefaultImporter)[BuiltInImporters] first, and then script assets, so it does not call any script-defined PostProcessAllAssets for default assets.

End of Refresh

Setelah semua langkah ini selesai, Refresh() selesai. Artifact Database diperbarui dengan informasi yang relevan, dan file hasil impor yang diperlukan dihasilkan pada disk.

The Asset Database
Batching dengan AssetDatabase