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.
Untuk menetapkan Aset yang diberikan ke Aset, ikuti langkah-langkah ini:
/
. Sebagai contoh, gunakan nama AssetBundle environment/forest
untuk membuat bundel bernama forest
di bawah sub-folder environment
sub-folderSitemap 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.
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.
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.