AssetBundles
Aset Persiapan untuk AsetBundles

AssetBundle workflow

Untuk memulai dengan AssetBundles, ikuti langkah-langkah ini. Informasi lebih rinci tentang setiap bagian alur kerja dapat ditemukan di halaman lain di bagian dokumentasi ini.

Menetapkan Aset ke AssetBundles

Untuk menetapkan Aset yang diberikan ke Aset, ikuti langkah-langkah ini:

  1. Pilih Aset yang ingin Anda tetapkan ke bundelapan dari Tampilan Proyek Anda.
  2. Memeriksa objek di InspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
    Lihat di Glossary
    .
  3. Di bagian bawah Inspektur, ada bagian untuk menetapkan Aset dan Varian. Gunakan tetesan tangan kiri untuk menetapkan AssetBundle, dan drop tangan kanan untuk menetapkan varian.
  4. Klik None pada drop kiri untuk mengungkapkan nama AssetBundle yang terdaftar saat ini.
  5. Klik New untuk membuat AssetBundle baru
  6. Jenis dalam nama AssetBundle yang diinginkan. nama Note: AssetBundle mendukung jenis struktur folder tergantung pada apa yang Anda ketikkan. Untuk menambahkan sub-folder, nama folder terpisah oleh /. Sebagai contoh, gunakan nama AssetBundle environment/forest untuk membuat bundel bernama forest di bawah sub-folder environment sub-folder
  7. Setelah Anda memilih atau membuat nama AssetBundle, Anda dapat mengulangi proses ini untuk tangan kanan turun ke menetapkan atau membuat nama Variant, jika Anda menginginkan. Nama Variant tidak diperlukan untuk membangun AsetBundles

Sitemap Anda dapat menetapkan Aset dan label ke folder di Proyek Anda. Secara default, semua Aset di folder itu ditugaskan ke AssetBundle dan diberi label yang sama sebagai folder. Penugasan asetBundle untuk Aset individu mengambil predensi, namun.Note: You can assign an AssetBundle and label to a folder in your Project. By default, all Assets in that folder are assigned to the AssetBundle and given the same label as the folder. The AssetBundle assignments for individual Assets takes precedence, however.

Untuk membaca informasi lebih lanjut tentang tugas dan strategi yang menyertai, lihat dokumentasi pada Aset Persiapan untuk AsetBundles.

Membangun Aset

Buat folder yang disebut Editor di folder Aset, dan letakkan skrip dengan konten berikut di folder:

using UnityEditor;
using System.IO;

public class CreateAssetBundles
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if(!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, 
                                        BuildAssetBundleOptions.None, 
                                        BuildTarget.StandaloneWindows);
    }
}

Script ini membuat item menu di bagian bawah menu Aset yang disebut Build AssetBundles yang mengeksekusi kode dalam fungsi yang terkait dengan tag tersebut. Ketika Anda klik Build AssetBundles bar kemajuan muncul dengan dialog build. Ini mengambil semua Aset yang Anda labelkan dengan nama AsetBundle dan menempatkan mereka di folder di jalur assetBundleDirectory mendefinisikan.

Untuk detail lebih lanjut tentang ini, lihat dokumentasi pada Aset Bangunan.

Memuat Aset dan Aset

Jika Anda ingin memuat dari penyimpanan lokal, gunakan API AssetBundles.LoadFromFile, yang terlihat seperti ini:

public class LoadFromFileExample : MonoBehaviour {
    void Start() {
        var myLoadedAssetBundle 
            = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
        if (myLoadedAssetBundle == null) {
            Debug.Log("Failed to load AssetBundle!");
            return;
        }
        var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("MyObject");
        Instantiate(prefab);
    }
}

LoadFromFile mengambil jalur file bundel.

Jika Anda hosting AssetBundles Anda sendiri dan perlu mengunduhnya ke aplikasi Anda, gunakan API UnityWebRequestAssetBundle. Berikut ini contoh:

IEnumerator InstantiateObject()
{
    string url = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;        
    var request 
        = UnityEngine.Networking.UnityWebRequestAssetBundle.GetAssetBundle(url, 0);
    yield return request.Send();
    AssetBundle bundle = UnityEngine.Networking.DownloadHandlerAssetBundle.GetContent(request);
    GameObject cube = bundle.LoadAsset<GameObject>("Cube");
    GameObject sprite = bundle.LoadAsset<GameObject>("Sprite");
    Instantiate(cube);
    Instantiate(sprite);
}

GetAssetBundle(string, int) mengambil URL lokasi AssetBundle dan versi bundel yang ingin Anda unduh. Contoh ini masih menunjuk ke file lokal tetapi string url dapat menunjuk ke URL apa pun yang Anda miliki AssetBundles Anda dihosting.

Kelas UnityWebRequestAssetBundle memiliki pegangan khusus untuk berurusan dengan AssetBundles, DownloadHandlerAssetBundle, yang mendapat AssetBundle dari permintaan.

Terlepas dari metode yang Anda gunakan, Anda sekarang memiliki akses ke objek AssetBundle. Dari objek yang Anda butuhkan untuk menggunakan LoadAsset<T>(string) yang mengambil jenis, T, aset yang Anda mencoba untuk memuat dan nama objek sebagai string yang berada di dalam bundel. Ini mengembalikan objek apa pun yang Anda ubah dari AssetBundle. Anda dapat menggunakan benda-benda yang dikembalikan seperti objek di dalam Unity. Misalnya, jika Anda ingin membuat GameObject di tempat kejadian, Anda hanya perlu memanggil Instantiate(gameObjectFromAssetBundle).

Untuk informasi lebih lanjut tentang API yang memuat AssetBundles, lihat dokumentasi pada Menggunakan AssetBundles Natively.

AssetBundles
Aset Persiapan untuk AsetBundles