, Загрузка проста, как это:

могу заставить Unity Assetbundles работать в сборке iOS.

В Unity я строю пакеты активов:

using UnityEditor;

public class CreateAssetBundles
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.iOS);
    }
 }

И они прекрасно работают в Unity. используя их с

AssetBundle bundleLoadRequest = AssetBundle.LoadFromFile("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString());

и / или

WWW wwww = WWW.LoadFromCacheOrDownload("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString(), 4); 

(Без префикса file: // пакеты не будут работать ни в Unity, ни в Xcode)

Я строю проект для XCode и запускаю его в XCode и получаю эту ошибку:

Невозможно открыть файл архива: / Пользователи / Пользователь / Документы / Рабочие пространства / unityproject / Активы / AssetBundles / iOS / lchairanimations

Это может быть как-то связано с установкой правильного пути, но, поскольку я скопировал папку assetbundle впоследствии в проект Xcode, проблема остается.

 Gideons31 окт. 2017 г., 10:55
Нет, я пытаюсь получить к нему доступ локально. Пробовал оба LoadFromCacheOrDownload и AssetBundle.LoadFromFile, и я также попытался использовать абсолютный путь в сборке Unity - Xcode не находит или не может открыть пакет по какой-то причине.
 Gideons01 нояб. 2017 г., 14:40
Только что попробовал сейчас: да! Спасибо!
 Programmer31 окт. 2017 г., 10:33
Вы загружаете этот ресурс из интернета?
 Programmer01 нояб. 2017 г., 13:19
Мой ответ исправил вашу проблему? Я ожидаю этого. Дайте мне знать

Ответы на вопрос(1)

Решение Вопроса

"собака" в наш AssetBundle с именем«животные» и построить его, а затем загрузить его во время выполнения.

Настройка папок сборки:

1, Выберите ресурс, такой как файл изображения. В этом случае это"Dog.jpeg" файл. См. Меню на вкладке «Инспектор». Иногда, опция AssetBundle скрыта, перетащите ее вверх, чтобы показать. Смотрите анимационный GIF ниже, чтобы узнать, как это сделать.По умолчанию AssetBundle - «Нет», Нажми на"Никто" затем перейдите к«Новый» опцию и создайте новый AssetBundle и назовите его «животные»

2, Создать папку с именемStreamingAssets в папке «Активы». Это папка, в которую мы собираемся встроить AssetBundle. Орфография имеет значение, и она чувствительна к регистру, поэтому не забудьте назвать ее правильно.

3, Создать подпапку вStreamingAssets папка для хранения AssetBundle. Для этого примера назовите эту папкуAssetBundles так что вы можете использовать его, чтобы узнать, что в нем.

Сборка AssetBundle:

4, Ниже приведен скрипт сборки.

A, Создать скрипт с именемExportAssetBundles и поместите его в папку с именем"Редактор" в папке Assets затем скопируйте код ниже в нем:

using System.IO;
using UnityEditor;
using UnityEngine;

public class ExportAssetBundles
{
    [MenuItem("Assets/Build AssetBundle")]
    static void ExportResource()
    {
        string folderName = "AssetBundles";
        string filePath = Path.Combine(Application.streamingAssetsPath, folderName);

        //Build for Windows platform
        BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);

        //Uncomment to build for other platforms
        //BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.iOS);
        //BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.Android);
        //BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.WebGL);
        //BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX);

        //Refresh the Project folder
        AssetDatabase.Refresh();
    }
}

B, Создайте свой AssetBudle, перейдя вактивы ->Сборка AssetBundle меню.

Вы должны увидеть встроенные AssetBundles внутриAssets/StreamingAssets/AssetBundles каталог. Если нет, обновите вкладку Project.

Загрузка AssetBundle во время выполнения:

5, При загрузке,Application.streamingAssetsPath следует использовать для доступа кStreamingAssets папка. Для доступа ко всем папкам используйте,Application.streamingAssetsPath + "/AssetBundle/" + assetbunlenameWithoutExtension;,AssetBundle а такжеAssetBundleRequest API используются для загрузки AssetBundle. Так как это изображение,Texture2D передается им. Если вы используете префаб, передайтеGameObject вместо этого создайте его экземпляр. Смотрите комментарий в коде, где эти изменения должны быть сделаны. Рекомендуется использоватьPath.Combine объединить пути, чтобы код ниже использовал это вместо этого.

Ниже приведена простая функция загрузки:

IEnumerator LoadAsset(string assetBundleName, string objectNameToLoad)
{
    string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "AssetBundles");
    filePath = System.IO.Path.Combine(filePath, assetBundleName);

    //Load "animals" AssetBundle
    var assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(filePath);
    yield return assetBundleCreateRequest;

    AssetBundle asseBundle = assetBundleCreateRequest.assetBundle;

    //Load the "dog" Asset (Use Texture2D since it's a Texture. Use GameObject if prefab)
    AssetBundleRequest asset = asseBundle.LoadAssetAsync<Texture2D>(objectNameToLoad);
    yield return asset;

    //Retrieve the object (Use Texture2D since it's a Texture. Use GameObject if prefab)
    Texture2D loadedAsset = asset.asset as Texture2D;

    //Do something with the loaded loadedAsset  object (Load to RawImage for example) 
    image.texture = loadedAsset;
}

Вещи перед загрузкой заметки:

A, Имя Assetbundle являетсяanimals.

B, Название актива / объекта, который мы хотим загрузить из животных.dog Это простой JPG собаки.

C, Загрузка проста, как это:

string nameOfAssetBundle = "animals";
string nameOfObjectToLoad = "dog";

public RawImage image; 

void Start()
{
    StartCoroutine(LoadAsset(nameOfAssetBundle, nameOfObjectToLoad));
}

Ваш ответ на вопрос