AssetBundle 로드
AssetBundle.LoadFromMemoryAsync
AssetBundleCreateRequest LoadFromMemoryAsync(byte[] binary, uint crc = 0);
IEnumerator LoadFromMemoryAsync(string path)
{
AssetBundleCreateRequest createRequest = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
yield return createRequest;
AssetBundle bundle = createRequest.assetBundle;
var prefab = bundle.LoadAsset.("MyObject");
Instantiate(prefab);
}
AssetBundle.LoadFromFile
AssetBundle LoadFromFile(string path, uint crc = 0, ulong offset = 0);
var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
if (myLoadedAssetBundle == null) {
Debug.Log("Failed to load AssetBundle!");
return;
}
var prefab = myLoadedAssetBundle.LoadAsset.("MyObject");
Instantiate(prefab);
WWW.LoadFromCacheOrDownload
WWW LoadFromCacheOrDownload(string url, int version);
IEnumerator Start()
{
while (!Caching.ready)
yield return null;
var www = WWW.LoadFromCacheOrDownload("http://myserver.com/myassetBundle.unity3d", 5);
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
yield return null;
}
var myLoadedAssetBundle = www.assetBundle;
var asset = myLoadedAssetBundle.mainAsset;
}
ab 캐시는 Caching 클래스에서 관리되며, Caching은 ab 백업과 스크롤을 할 수 있습니다.
https://docs.unity3d.com/ScriptReference/Caching.html
www의 성능 문제 때문에 이 인터페이스를 사용할 때 주의해야 할 것은 다음과 같습니다.
UnityWebRequest
UnityWebRequest UnityWebRequest.GetAssetBundle(string uri, uint crc);
AssetBundle DownloadHandlerAssetBundle.GetContent(Networking.UnityWebRequest www);
IEnumerator InstantiateObject()
{
string uri = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;
UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0);
yield return request.Send();
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
GameObject cube = bundle.LoadAsset("Cube");
GameObject sprite = bundle.LoadAsset("Sprite");
Instantiate(cube);
Instantiate(sprite);
}
LoadAsset
GameObject gameObject = loadedAssetBundle.LoadAsset(assetName);
Unity.Object[] objectArray = loadedAssetBundle.LoadAllAssets();
AssetBundleRequest request = loadedAssetBundleObject.LoadAssetAsync(assetName);
yield return request;
var loadedAsset = request.asset;
AssetBundleRequest request = loadedAssetBundle.LoadAllAssetsAsync();
yield return request;
var loadedAssets = request.allAssets;
Load Manifests
AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);
AssetBundleManifest manifest = assetBundle.LoadAsset("AssetBundleManifest");
AssetBundle assetBundle = AssetBundle.LoadFromFile(manifestFilePath);
AssetBundleManifest manifest = assetBundle.LoadAsset("AssetBundleManifest");
string[] dependencies = manifest.GetAllDependencies("assetBundle"); //Pass the name of the bundle you want the dependencies for.
foreach(string dependency in dependencies)
{
AssetBundle.LoadFromFile(Path.Combine(assetBundlePath, dependency));
}