Membuat Aset Bundel di Unity 4
Sistem Animasi Legacy

Mengelola Ketergantungan Aset pada Unity 4

Dalam versi Unity lebih awal dari Unity 5, dependensi aset harus didefinisikan menggunakan editor 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
saja. (Dalam Unity 5 kami menyediakan alat dalam editor untuk menetapkan aset ke Bundel khusus dan penanganan ketergantungan otomatis). Informasi ini disediakan bagi mereka yang bekerja pada proyek-proyek legacy di Unity 4, dan berbicara asumsi Anda menggunakan Unity 4.

Setiap aset yang diberikan dalam bundel dapat tergantung pada aset lain. Misalnya, model dapat menggabungkan bahan yang pada gilirannya menggunakan tekstur dan shadersProgram yang berjalan di GPU. More info
Lihat di Glossary
. Hal ini dimungkinkan untuk mencakup semua ketergantungan aset bersama dengan itu dalam bundelnya. Namun, beberapa aset dari berbagai bundel mungkin semua tergantung pada set aset lain (misalnya, beberapa model bangunan yang berbeda dapat menggunakan tekstur batu bata yang sama). Jika salinan yang terpisah dari ketergantungan bersama disertakan dalam setiap bundel yang memiliki benda-benda yang menggunakannya, maka contoh yang berlebihan dari aset akan dibuat ketika bundel dimuat. Ini akan menghasilkan memori yang terbuang.

Untuk menghindari pemborosan tersebut, dimungkinkan untuk memisahkan ketergantungan bersama ke dalam bundel terpisah dan cukup referensikan dari setiap bundel dengan aset yang membutuhkannya. Pertama, fitur merujuk perlu diaktifkan dengan panggilan ke WordPress.org. Kemudian, bundel yang mengandung ketergantungan yang direferensikan harus dibangun. Selanjutnya, panggilan lain untuk PushAssetDependencies harus dibuat sebelum membangun bundel yang merujuk aset dari bundel pertama. Tingkat ketergantungan tambahan dapat diperkenalkan menggunakan panggilan lebih lanjut ke PushAssetDependencies. Tingkat referensi disimpan pada tumpukan, sehingga dimungkinkan untuk kembali kembali tingkat menggunakan fungsi WordPress.org yang sesuai. Panggilan push dan pop harus seimbang termasuk dorongan awal yang terjadi sebelum bangunan.

Pada runtime, Anda perlu memuat bundel yang mengandung ketergantungan sebelum bundel lain yang merujuk pada mereka. Misalnya, Anda harus memuat bundel tekstur bersama sebelum memuat bundel terpisah bahan yang merujuk tekstur tersebut.

ID Aset

Jika Anda mengantisipasi perlu untuk membangun kembali bundel aset yang merupakan bagian dari rantai ketergantungan maka Anda harus membangunnya dengan opsi BuildAssetBundleOptions diaktifkan. Ini menjamin bahwa nilai ID internal yang digunakan untuk mengidentifikasi aset akan sama setiap kali bundel dibangun kembali.

Ketika membangun bundel aset dengan metode ini, benda-benda di dalamnya ditugaskan kode hash 32 bit yang dihitung menggunakan nama file bundel aset, GUID aset dan id lokal objek dalam aset. Untuk alasan itu pastikan untuk menggunakan nama file yang sama ketika membangun kembali. Juga dicatat bahwa memiliki banyak objek yang mungkin menyebabkan hash collisionstabrakan terjadi ketika mesin fisika mendeteksi bahwa tabrakan dari dua GameObjects membuat kontak atau tumpang tindih, ketika setidaknya satu memiliki komponen kaku dan bergerak. More info
Lihat di Glossary
mencegah Unity dari membangun bundel aset.

Ketergantungan warna

Setiap kali naungan langsung direferensikan sebagai parameter dalam WordPress.org, atau tidak langsung dengan opsi BuildAssetBundleOptions kode naungan disertakan dengan bundel aset. Ini bisa menyebabkan masalah jika Anda menggunakan BuildAssetBundle sendirian untuk membuat beberapa bundel aset, karena naungan yang direferensikan akan dimasukkan dalam setiap bundel yang dihasilkan. Ada konflik, yaitu ketika Anda mencampur versi yang berbeda dari naungan, sehingga Anda harus membangun kembali semua bundel Anda setelah memodifikasi naungan. Kode naungan juga akan meningkatkan ukuran bundel. Untuk menghindari masalah ini Anda dapat menggunakan WordPress.org untuk memisahkan naungan dalam satu bundel, dan itu akan memungkinkan Anda untuk memperbarui bundel naungan hanya. Sebagai contoh cara mencapai alur kerja ini, Anda dapat membuat 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
yang mencakup referensi ke naungan yang diperlukan:

C# Contoh

using UnityEngine;

public class ShadersList : MonoBehaviour {
    public Shader[] list;
}


Buat objek kosong, menetapkan skrip, tambahkan naungan ke daftar dan buat prefab, yaitu “ShadersList”. Kemudian Anda dapat membuat eksportir yang menghasilkan semua bundel dan memperbarui bundel naungan:

C# Contoh

using UnityEngine;
using UnityEditor;

public class Exporter : MonoBehaviour {
    
    [MenuItem("Assets/Export all asset bundles")]
    static void Export() {
        BuildAssetBundleOptions options = 
            BuildAssetBundleOptions.CollectDependencies | 
            BuildAssetBundleOptions.CompleteAssets | 
            BuildAssetBundleOptions.DeterministicAssetBundle;
        
        BuildPipeline.PushAssetDependencies();
        BuildPipeline.BuildAssetBundle(AssetDatabase.LoadMainAssetAtPath("Assets/ShadersList.prefab"), null, "Data/ShadersList.unity3d", options);
            
        BuildPipeline.PushAssetDependencies();
        BuildPipeline.BuildAssetBundle(AssetDatabase.LoadMainAssetAtPath("Assets/Scene1.prefab"), null, "Data/Scene1.unity3d", options);
        BuildPipeline.BuildAssetBundle(AssetDatabase.LoadMainAssetAtPath("Assets/Scene2.prefab"), null, "Data/Scene2.unity3d", options);        
        
        BuildPipeline.PopAssetDependencies();
        BuildPipeline.PopAssetDependencies();
    }
    
    [MenuItem("Assets/Update shader bundle")]
    static void ExportShaders() {
        BuildAssetBundleOptions options = 
            BuildAssetBundleOptions.CollectDependencies | 
            BuildAssetBundleOptions.CompleteAssets | 
            BuildAssetBundleOptions.DeterministicAssetBundle;
        
        BuildPipeline.PushAssetDependencies();
        BuildPipeline.BuildAssetBundle(AssetDatabase.LoadMainAssetAtPath("Assets/ShadersList.prefab"), null, "Data/ShadersList.unity3d", options);
        
        BuildPipeline.PopAssetDependencies();
    }
}


Berhati-hatilah bahwa Anda harus memuat bundel naungan terlebih dahulu. Salah satu kelemahan dari metode ini adalah bahwa opsi BuildAssetBundleOptions dapat menghasilkan konflik karena menggandakan hashe ketika jumlah benda terlalu besar. Dalam hal ini build akan gagal, dan tidak akan mungkin untuk memperbarui bundel naungan sendiri. Dalam hal ini Anda harus menghapus opsi itu dan membangun kembali semua bundel aset.

Membuat Aset Bundel di Unity 4
Sistem Animasi Legacy