Belajar Unity untuk Pemula - Asset Bundle

Tags


Asset bundle adalah sebuah archive yang mengandung file-file asset.

Berbeda dengan Asset Package yang berformat .unitypackage, Asset Bundle dapat dibuka saat runtime.

Jadi apabila kita memiliki Texture, 3D Model, Audio, dan lain-lain dalam Asset Bundle, kita dapat memuat file-file tersebut dan menggunakannya dalam game saat game berjalan.

Asset Bundle dapat disimpan pada sebuah server, sehingga game yang kita jalankan bisa men-download-nya saat runtime tanpa harus disertakan bersama executable di sisi client.



Asset Bundle juga dapat disimpan di komputer lokal bersama executable dari game kita tanpa membutuhkan sebuah server.

Dengan demikian, kita bisa membuat sebuah game yang asset-nya bisa ditambahi atau dikurangi seperti pada game-game yang bersifat moddable.

Membuat Asset Bundle di Unity

Secara umum, asset bundle dibuat melalui langkah-langkah ini:
  • Menyeleksi asset-asset yang akan dimasukkan ke dalam Asset Bundle archive.
  • Mem-build asset-asset tersebut sehingga dihasilkan sebuah Asset Bundle archive.
  • Membuat client untuk Asset Bundle yang mengonsumsi Asset Bundle archive tadi.
  • Memuat asset-asset dari Asset Bundle sesuai kebutuhan game.
  • Memperlakukan asset-asset yang sudah dimuat tadi sebagai objek Unity pada umumnya seperti Texture, Prefab, dan lain-lain.

Menyeleksi dan Mem-Build Asset untuk Asset Bundle

Pertama-tama, buatlah sebuah project Unity dengan nama apapun.

Kemudian, buat folder baru bernama "HasilBuild" pada root dari folder project tersebut.

Untuk menyeleksi Asset yang akan dimasukkan dalam asset bundle, sorot asset yang diinginkan, kemudian lihat bagian bawah dari Inspector Window.

Di bagian tersebut ada sebuah drop up, tekan itu kemudian pilih New.

Lihat gambar di bawah ini:


Beri nama "myasbun.asb".

Kemudian ulangi langkah tersebut sampai semua asset yang diinginkan terseleksi.

Untuk langkah kedua dan seterusnya, kita tidak perlu memberi nama baru, cukup pilih nama yang pertama kali dibuat.

Selanjutnya, kita akan mem-build asset-asset tadi menjadi sebuah Asset Bundle.

Untuk melakukannya, kita memerlukan sebuah Editor Script.

Buat script C# baru dengan nama "AssetBundleBuild", kemudian isi dengan kode-kode ini:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class AssetBundleBuild : Editor
{
 //MenuItem berfungsi untuk mendaftarkan perintah di bawah ini ke menu di Unity Editor
 //nanti perintah "Build AssetBundles" akan muncul pada menu Assets | Build AssetBundles
    [MenuItem("Assets/Build AssetBundles")]
    static public void BuildAssetBundle()
    {
  //ini adalah perintah untuk membuat Asset Bundle
        BuildPipeline.BuildAssetBundles("HasilBuild",
            BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets,
            BuildTarget.StandaloneWindows);
    }
}

Buatlah folder bernama "Editor" kemudian masukkan script tadi pada folder tersebut.

Selanjutnya, buka menu Assets | Build AssetBundles kemudian klik "Build AssetBundles".

Nanti hasil build dari Asset Bundle akan muncul pada folder "HasilBuild" yang ada pada root folder dari project ini.

Sekarang, langkah pertama selesai dan Asset Bundle siap dikonsumsi oleh project client.

Memuat Asset dari Asset Bundle pada Sebuah Client

Sekarang, buatlah sebuah project Unity lainnya dengan nama "AssetBundleTester".

Kemudian, buat sebuah scene baru bernama "TesterScene".

Dalam scene tersebut, buat sebuah Plane dengan cara membuka menu | GameObject | 3D Object | Plane seperti gambar di bawah ini:


Selanjutnya, buat sebuah material bernama "Plane" dengan klik kanan pada Project Window | Create | Material seperti gambar di bawah ini:



Pilih shader legacy diffuse pada material itu, kemudian pasang material tersebut pada GameObject yang bernama "Plane" tadi.

Selanjutnya, buatlah sebuah script C# bernama "LoadAssetBundle" dan isi dengan kode berikut ini:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadAssetBundle : MonoBehaviour
{
    private WWW www;
    public Material mat;

    void Start()
    {
        Caching.ClearCache();

        //URL untuk komputer lokal, jika dari server ganti: "http://alamat/path"
  //bagian ini HARUS DISESUAIKAN dengan lokasi Asset Bundle Anda
        string URL = "file:///D:/Projects/Unity/Belajar%20Unity%20untuk%20Pemula/AssetBundle/AssetBundle/HasilBuild/myasbun.asb";

        StartCoroutine(Load(URL, 1));
    }

    private IEnumerator Load(string url, int version)
    {
        while (!Caching.ready)
            yield return null;

        www = WWW.LoadFromCacheOrDownload(url, version);
        yield return www;

        Debug.Log("Termuat dengan sukses");

        if (www.error != null)
            throw new Exception("Ada WWW error: " + www.error);

        AssetBundle assetBundle = www.assetBundle;

        //ganti texturenya
        mat.SetTexture("_MainTex", assetBundle.LoadAsset<texture>("ciyy-512x512.png"));

        assetBundle.Unload(false);
    }
}

Selanjutnya, pasang script tersebut ke Game Object bernama "Plane".

Jalankan project ini, dan hasilnya, texture akan terpasang pada Plane di Game Window.

Download File Project Ini

Agar lebih jelas, silakan download file project pertama ini.

Untuk mengimportnya ke Unity Anda, tinggal drag dari Windows Explorer ke window "Project" pada Unity.