Legacy Asset Bundles
Mengelola Ketergantungan Aset pada Unity 4

Membuat Aset Bundel di Unity 4

Dalam versi Unity lebih awal dari Unity 5, aset harus dipilih dan ditambahkan ke bundel 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 tertentu). Informasi ini disediakan bagi mereka yang bekerja pada proyek-proyek legacy di Unity 4, dan berbicara asumsi Anda menggunakan Unity 4.

Untuk membuat Aset Bundel Anda perlu menggunakan kelas editor BuildPipeline. Semua skrip menggunakan kelas Editor harus ditempatkan di folder bernama Editor, di mana saja di folder Aset. Berikut ini adalah contoh dari skrip tersebut di C#:

// Legacy Unity 4 example. Not for use in Unity 5 & onwards
using UnityEngine;
using UnityEditor;

public class ExportAssetBundles {
    [MenuItem("Assets/Build AssetBundle")]
    static void ExportResource () {
        string path = "Assets/myAssetBundle.unity3d";
        Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
        BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, 
                                       BuildAssetBundleOptions.CollectDependencies 
                                     | BuildAssetBundleOptions.CompleteAssets);
    }
}

Script editor tidak perlu diterapkan pada GameObjectObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary
, itu bukan digunakan oleh Editor. Contoh sebelumnya ini akan membuat item baru dalam menu "Assets" dari editor Anda yang disebut "Build AssetBundle".

Untuk menggunakan contoh ini:

  • Buat file skrip C# bernama ExportAssetBundles.cs, di dalam folder bernama Editor, di Tampilan Proyek.
  • Pilih Aset atau Aset di folder proyek Anda yang ingin Anda buat menjadi Aset.
  • Pilih Membangun AssetBundle dari menu Aset. Klik “Simpan” untuk membuat AssetBundle.
  • Garis pertama dari fungsi ExportResource menetapkan jalur AssetBundle Anda.
  • Garis berikutnya menetapkan pilihan yang akan dibuat menjadi AsetBundle sebagai objek yang dipilih dalam Project windowJendela yang menunjukkan isi folder Assets (Project tab) More info
    Lihat di Glossary
    .

Fungsi BuildAssetBundle adalah garis yang menciptakan AssetBundle dan menyimpannya ke lokasi yang ditentukan. Parameter pertama menentukan keyAsset, yang merupakan Aset khusus yang dapat diperoleh langsung dengan properti utamaAsset ketika memuat Aset dari AssetBundle. Tidak wajib untuk mengatur Aset utama, jika ini tidak akan digunakan Anda dapat menggunakan null untuk parameter. Parameter kedua adalah array objek yang akan membuat AssetBundle. Parameter ketiga adalah lokasi pada disk yang asetBundle akan disimpan. Parameter akhir adalah bendera atau opsi yang digunakan saat membangun Aset. BuildAssetBundleOptions ini dapat dikombinasikan menggunakan bitwise ATAU operator.

Aset Bangunan harus menjadi langkah pra-publik yang terjadi hanya sekali dan dengan panggilan fungsi tunggal, misalnya, dengan Menu Barang yang membangun semua Aset. Ketika Anda mengembangkan aplikasi Anda, Anda harus menulis skrip helper yang dapat membangun semua AsetBundles untuk platform target dengan satu klik atau dalam batchmode tanpa intervensi pengguna.

Ada tiga metode kelas yang dapat Anda gunakan untuk membangun AssetBundles:

  • WordPress.org memungkinkan Anda untuk membangun asetBundles dari setiap jenis aset.

  • WordPress.org digunakan ketika Anda ingin memasukkan hanya scenesAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
    Lihat di Glossary
    untuk distreaming dan dimuat sebagai data yang tersedia.

  • BuildPipeline.BuildAssetBundleExplicitAssetNames adalah sama seperti BuildPipeline. MembangunAssetBundle tetapi memiliki parameter tambahan untuk menentukan pengidentifikasi string kustom (nama) untuk setiap objek.

Contoh cara membangun AsetBundle

Bundel aset bangunan dilakukan melalui scripting editor. Ada contoh dasar dari ini dalam dokumentasi scripting untuk WordPress.org.

Demi contoh ini, salin dan tempelkan skrip dari tautan di atas ke skrip C # baru yang disebut ExportAssetBundles. Script ini harus ditempatkan di folder bernama Editor, sehingga bekerja di dalam Editor Unity.

Sekarang dalam menu AssetsSetiap media atau data yang dapat digunakan dalam permainan atau proyek Anda. Aset mungkin berasal dari file yang dibuat di luar Unity, seperti model 3D, file audio atau gambar. Anda juga dapat membuat beberapa jenis aset di Unity, seperti Pengontrol Animator, Audio Mixer atau Tekstur Render. More info
Lihat di Glossary
, Anda harus melihat dua pilihan menu baru.

  1. Build AssetBundle From Selection - Track dependencies. Ini akan membangun objek saat ini menjadi bundel aset dan mencakup semua ketergantungan. Misalnya jika Anda memiliki 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 terdiri dari beberapa lapisan hirarkis maka akan secara berulang menambahkan semua objek anak dan komponen ke bundel aset.

  2. Build AssetBundle From Selection - No dependency tracking. Ini adalah kebalikan dari metode sebelumnya dan hanya akan mencakup aset tunggal yang telah Anda pilih.

Misalnya ini, Anda harus membuat prefab baru. Pertama membuat kubus baru dengan pergi ke GameObject > 3D Object > Cube, yang akan membuat kubus baru di Hierarchy View. Kemudian seret Cube dari Hierarchy View ke Project View, yang akan membuat prefab objek itu.

Anda harus klik kanan kubus prefab di jendela proyek dan pilih Build AssetBundle From Selection - Track dependencies. Pada titik ini Anda akan disajikan dengan jendela untuk menyimpan aset “bundled”. Jika Anda membuat folder baru yang disebut "AssetBundles" dan menyimpan kubus sebagai Cube.unity3d, jendela proyek Anda sekarang akan melihat sesuatu seperti ini.

Pada titik ini Anda dapat memindahkan AssetBundle Cube.unity3d di tempat lain di penyimpanan lokal Anda, atau mengunggahnya ke server pilihan Anda.

Contoh cara mengubah sifat aset saat membangun Aset Bundle

Anda dapat menggunakan AssetDatabase.ImportAsset untuk memaksa reimporting aset tepat sebelum memanggil WordPress.org, dan kemudian gunakan AssetPostprocessor.OnPreprocessTexture untuk mengatur sifat yang diperlukan. Contoh berikut akan menunjukkan cara mengatur tekstur yang berbeda compressionsMetode menyimpan data yang mengurangi jumlah ruang penyimpanan yang dibutuhkan. Kompresi Tekstur, Kompresi Animasi, Kompresi Audio, Membangun Kompresi.
Lihat di Glossary
ketika membangun Aset Bundle.

// Legacy Unity 4 example. Not for use in Unity 5 & onwards.
// Builds an asset bundle from the selected objects in the project view,
// and changes the texture format using an AssetPostprocessor.

using UnityEngine;
using UnityEditor;

public class ExportAssetBundles {
    
    // Store current texture format for the TextureProcessor.
    public static TextureImporterFormat textureFormat;
    
    [MenuItem("Assets/Build AssetBundle From Selection - PVRTC_RGB2")]
    static void ExportResourceRGB2 () {
        textureFormat = TextureImporterFormat.PVRTC_RGB2;
        ExportResource();       
    }   
    
    [MenuItem("Assets/Build AssetBundle From Selection - PVRTC_RGB4")]
    static void ExportResourceRGB4 () {
        textureFormat = TextureImporterFormat.PVRTC_RGB4;
        ExportResource();
    }
    
    static void ExportResource () {
        // Bring up save panel.
        string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d");
        
        if (path.Length != 0) {
            // Build the resource file from the active selection.
            Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
            
            foreach (object asset in selection) {
                string assetPath = AssetDatabase.GetAssetPath((UnityEngine.Object) asset);
                if (asset is Texture2D) {
                    // Force reimport thru TextureProcessor.
                    AssetDatabase.ImportAsset(assetPath);
                }
            }
            
            BuildPipeline.BuildAssetBundle(Selection.activeObject, 
                                           selection, 
                                           path, 
                                           BuildAssetBundleOptions.CollectDependencies |
                                           BuildAssetBundleOptions.CompleteAssets);
            Selection.objects = selection;
        }
    }
}
// Legacy Unity 4 example. Not for use in Unity 5 & onwards.
// Changes the texture format when building the Asset Bundle.

using UnityEngine;
using UnityEditor;

public class TextureProcessor : AssetPostprocessor
{ 
    void OnPreprocessTexture() {
        TextureImporter importer = assetImporter as TextureImporter;
        importer.textureFormat = ExportAssetBundles.textureFormat;
    }
}


Anda juga dapat mengontrol bagaimana aset diimpor menggunakan AssetDatabase.ImportAssetOptions.

Dalam lingkungan pengujian, Anda kadang-kadang perlu menguji perubahan yang membutuhkan AsetBundles untuk dibangun kembali. Dalam kasus ini, disarankan untuk menggunakan opsi BuildAssetBundleOptions.UncompressedAssetBundle ketika Anda membangun Aset. Ini membuatnya lebih cepat untuk membangun dan memuat AssetBundles tetapi mereka juga akan lebih besar dan oleh karena itu mengambil lebih lama untuk diunduh.

Aset Bangunan dalam lingkungan produksi

Ketika pertama kali menggunakan AssetBundles, mungkin tampak cukup untuk secara manual membangun mereka seperti yang terlihat dalam contoh sebelumnya. Tetapi sebagai proyek tumbuh dalam ukuran dan jumlah aset meningkat, melakukan proses ini dengan tangan tidak efisien. Pendekatan yang lebih baik adalah menulis fungsi yang membangun semua AssetBundles untuk sebuah proyek. Anda dapat, misalnya, menggunakan file teks yang memetakan file Asset ke file AssetBundle.

Legacy Asset Bundles
Mengelola Ketergantungan Aset pada Unity 4