Как я могу протестировать AssetBundle (DLC) локально на Android в Unity?

Я пытаюсь протестировать AssetBundles для игры, над которой я сейчас работаю. Я хочу использовать это, потому что не хочу, чтобы игра занимала много места. Я до сих пор не знаю, как работают серверы и как их туда закачивать. Я искал, как это сделать, и нашел здесь кое-что интересное: Загрузка данных AssetBundle (DLC) на телефон Android во время выполнения [UNITY] Но он кое-что говорит о загрузке на сервер и т. д., но я хочу протестировать это локально. Любая рекомендация?

Следуя тому, что мне сказал Реми, мой код выглядит так:

public class LoadFromFileExample : MonoBehaviour {

// Use this for initialization
void Start () {

    string fileName = "planes";
    var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, fileName));
    if (myLoadedAssetBundle == null)
    {
        Debug.Log("Failed to load AssetBundle!");
        return;
    }
    var prefab = myLoadedAssetBundle.LoadAsset< GameObject > ("andy");
    Instantiate(prefab);

    myLoadedAssetBundle.Unload(false);

}

// Update is called once per frame
void Update () {

}
} 

Но он показывает следующую ошибку: Unable to open archive file: C:/Users/Chris/Desktop/myDLC/Assets/StreamingAssets/myassetBundle

Это название пакета ресурсов


person CRM MO    schedule 13.02.2019    source источник


Ответы (1)


Взгляните на AssetBundle.LoadFromFile.

Это позволяет вам загрузить файл assetbundle из локального хранилища устройства. Это означает, что вам не нужно сначала загружать / скачивать их.

это будет выглядеть примерно так:

string fileName = "fooAssetBundle";//name of the assetbundle you want to load

var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, fileName));//Creates a filepath starting at the streamingAssetsPath and appends filename to it. 

var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("MyObject");//Create a GameObject from the assetbundle
Instantiate(prefab);//instantiate the GameObject

myLoadedAssetBundle.Unload(false);//Unload the assetbundle from memory as it isn't used anymore

В приведенном выше примере используется Application.StreamingAssetsPath, но это может быть любой путь по вашему желанию, например Application.PersistentDataPath или внешнее хранилище.

person Remy    schedule 14.02.2019
comment
Спасибо за ответ, я близок к тому, чего хочу добиться. Я сделал то, что вы мне предложили, и получаю сообщение об ошибке: Невозможно открыть файл архива: C: / Users / Chris / Desktop / myDLC / Assets / StreamingAssets / myassetBundle, и я не знаю, о чем идет речь. Я даже сделал папку под названием StreamingAssets и поместил туда свой пакет активов, но все равно не помогает: / - person CRM MO; 16.02.2019
comment
Вы уверены, что файл существует в этом месте? Например, если вы копируете его в проводнике, вы попадаете в файл, и есть файл anmed myassetBundle? - person Remy; 16.02.2019
comment
Это то, о чем я беспокоюсь, у меня нет имени файла myassetBundle, имя пакета ресурсов - самолеты, я сохраняю проект и перезагружаю его, и он продолжает говорить myassetBundle - person CRM MO; 16.02.2019
comment
Прикрепил образ папки assetBundles - person CRM MO; 16.02.2019
comment
Внутри самолетов предполагается, что у него есть 3 объекта с именами: Энди, Джет и Самолет. - person CRM MO; 16.02.2019
comment
что произойдет, если вы переименуете файл самолетов в myassetBundle? Он тогда загружает? - person Remy; 16.02.2019
comment
Он чувствителен к нижнему регистру, поэтому я могу переименовать его только в myassetbundle. Я даже меняю имя файла в сценарии C # на myassetbundle вместо самолетов, и все равно появляется та же ошибка: C: / Users / Chris / Desktop / myDLC / Assets / StreamingAssets / planes UnityEngine.AssetBundle: LoadFromFile (String) Не удалось загрузить AssetBundle ! UnityEngine.Debug: Log (Object) LoadFromFileExample: Start () (в Assets / Scripts / LoadFromFileExample.cs: 15) - person CRM MO; 16.02.2019