Пакеты активов Unity восстанавливаются со старыми данными - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть мобильный проект, который отображает различные AR опыт пользователя через мобильное приложение.Это приложение сделано в Unity.

Наряду с этим проектом Unity у нас есть второй проект, который хранит исключительно пакеты активов.Каждый опыт AR представляет собой префаб, помеченный уникальным именем пакета активов.Эти пакеты хранятся в Интернете и при необходимости загружаются в основное мобильное приложение.У нас возникают проблемы с корректным обновлением этих пакетов, когда такие изменения в префабе, как масштабирование или ротация, не отражаются в перестроенном пакете ресурсов.

Вот взгляд на процесс, который мы используемдля восстановления ресурсов это всего лишь простой скрипт.

[MenuItem("Spiff/Build AssetBundles")]
static void BuildAllAssetBundles()
{
    // BuildPlatformBundles(BuildTarget.iOS);
    BuildPlatformBundles(BuildTarget.Android);
}

static void BuildPlatformBundles(BuildTarget platform)
{
    // We convert the passed platform enum to a string.
    string platformFolder = platform.ToString();
    string assetBundleDirectory = "Assets/AssetBundles/" + platformFolder;

    // Build our bundles out to the relevent platform specific folder.
    if (!AssetDatabase.IsValidFolder(assetBundleDirectory))
    {
        AssetDatabase.CreateFolder("Assets/AssetBundles/", platformFolder);
    }
    BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, platform);
}

В настоящее время мы используем 'BuildAssetBundleOptions.None'. Мы также попробовали установить флаг ForceRebuild, но это не имеет никакого эффекта.Правильно ли я полагаю, что Unity имеет своего рода внутренний кэш, который он хранит для пакетов активов?Если да, то можем ли мы как-то это очистить, чтобы я мог на 100% гарантировать, что сборка, которую я собираю, будет самой современной, основываясь на помеченном им сборном?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Как упомянуто remy_rm, попробуйте инструмент Unity Asset Bundle Browser.Это дает больше контроля над тем, какие активы находятся в пакете.

Ваша проблема может быть решена, если вы обеспечите две вещи:

1- Когда вы вносите изменения в префаб и создаете новый пакет,действительно ли оно создано с учетом указанных изменений?(повторное использование инструмента упростит проверку)

2- Пакеты, которые вы загружаете в основном приложении, являются новыми, а не старыми кэшированными.Например, в Unity Webgl необходимо очистить кеш браузера, чтобы быть на 100% уверенным, что приложение загружает новые пакеты ресурсов и не использует старые в кэше браузера.

0 голосов
/ 23 ноября 2018

Загруженные пакеты активов действительно кэшируются и будут оставаться таковыми до тех пор, пока не будет вызван AssetBundle.Unload() для освобождения всей памяти, связанной с активом.

После того, как актив выгружен более новыйверсия пакета активов может быть загружена и создана с новыми значениями (при условии, что загруженный файл содержит всю обновленную информацию), в противном случае он будет загружать данные из кэша, если он доступен.

С другой стороны: похоже,Вы все еще используете старый конвейер активов.В Unity есть плагин, который значительно упрощает рабочий процесс набора ресурсов, который называется браузер набора ресурсов, который можно найти здесь .Он поставляется с более простым пользовательским интерфейсом для создания пакетов и проверки пакетов, с открытым исходным кодом и очень настраиваемым конвейером.Возможно, стоит проверить.

...