Чтобы начать работу с AssetBundles, выполните следующие действия. Более подробную информацию о каждой части рабочего процесса можно найти на других страницах этого раздела документации.
Назначение ресурсов пакетам AssetBundles
Чтобы назначить данный объект AssetBundle, выполните следующие действия:
- Выберите ресурс, который хотите назначить пакету, в представлении проекта.
- Изучите объект в Инспектореокне Unity, в котором отображается информация о выбранном в данный момент игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. Дополнительная информация
См. в Словарь. - В нижней части Инспектора есть раздел для назначения AssetBundles и Variants. Используйте раскрывающийся список слева, чтобы назначить AssetBundle, и раскрывающийся список справа, чтобы назначить вариант.
- Нажмите Нет в раскрывающемся списке слева, чтобы отобразить зарегистрированные в настоящее время имена AssetBundle.
- Нажмите Создать, чтобы создать новый AssetBundle.
- Введите желаемое имя AssetBundle. Примечание. Имена AssetBundle поддерживают тип структуры папок в зависимости от того, что вы вводите. Чтобы добавить вложенные папки, разделите имена папок с помощью
/
. Например, используйте имя AssetBundleenvironment/forest
, чтобы создать пакет с именемforest
всреда
подпапка - После того, как вы выбрали или создали имя AssetBundle, вы можете повторить этот процесс для правого раскрывающегося списка, чтобы назначить или создать вариант имени, если хотите. Имена вариантов не требуются для сборки AssetBundles
Примечание. Вы можете назначить AssetBundle и ярлык для папки в вашем проекте. По умолчанию все активы в этой папке назначаются AssetBundle и имеют ту же метку, что и папка. Однако назначения AssetBundle для отдельных Активов имеют приоритет.
Дополнительную информацию о назначениях AssetBundle и сопутствующих стратегиях см. в документации по Подготовке ресурсов для AssetBundles.
Создайте AssetBundles
Создайте папку Editor в папках Assets и поместите в нее скрипт со следующим содержимым:
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);
}
}
Этот скрипт создает пункт меню в нижней части меню "Активы" под названием Build AssetBundles, который выполняет код в функции, связанной с этим тегом. Когда вы нажимаете Build AssetBundles, появляется индикатор выполнения с диалоговым окном сборки. Это берет все активы, которые вы пометили именем AssetBundle, и помещает их в папку по пути, который определяет assetBundleDirectory
.
Подробнее об этом см. в документации по созданию AssetBundles.
Загрузка AssetBundles и ресурсов
Если вы хотите выполнить загрузку из локального хранилища, используйте API AssetBundles.LoadFromFile
, который выглядит следующим образом:
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("MyObject");
Instantiate(prefab);
}
}
LoadFromFile
использует путь к файлу пакета.
Если вы размещаете свои AssetBundles самостоятельно и вам нужно загрузить их в свое приложение, используйте API UnityWebRequestAssetBundle
. Вот пример:
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("Cube");
GameObject sprite = bundle.LoadAsset("Sprite");
Instantiate(cube);
Instantiate(sprite);
}
GetAssetBundle(string, int)
принимает URL-адрес местоположения AssetBundle и версию пакета, который вы хотите загрузить. Этот пример по-прежнему указывает на локальный файл, но string url
может указывать на любой URL-адрес, на котором размещены ваши AssetBundles.
Класс UnityWebRequestAssetBundle имеет специальный дескриптор для работы с AssetBundle, DownloadHandlerAssetBundle
, который получает AssetBundle из запроса.
Независимо от того, какой метод вы используете, теперь у вас есть доступ к объекту AssetBundle. Из этого объекта вам нужно использовать LoadAsset
, который принимает тип T
актива, который вы повторная попытка загрузки и имя объекта в виде строки внутри пакета. Это возвращает любой объект, который вы загружаете из AssetBundle. Вы можете использовать эти возвращенные объекты точно так же, как и любой другой объект внутри Unity. Например, если вы хотите создать GameObject в сцене, вам просто нужно вызвать Instantiate(gameObjectFromAssetBundle)
.
Для получения дополнительной информации об API, которые загружают AssetBundles, см. документацию по использованию AssetBundles Native.