Unity 6.3
0 онлайн 54 гостей 3 в системе
Вход

Ресурсы по запросу

Ресурсы по требованию (ODR) — это функция, доступная для iOS и tvOS, которая позволяет уменьшить размер приложения. Уменьшение происходит путем отделения основных ресурсов, необходимых для запуска приложения, от ресурсов, которые являются необязательными или появляются в более поздних частях игры. Эти дополнительные ресурсы, известные как AssetBundles, доступны во всех целях сборки Unity. Однако для их размещения в App Store необходимо предпринять дополнительные шаги.

AssetBundles может содержать файлы ассетов, такие как модели, материалы, текстуры и сцены, но не может содержать скрипты. По этой причине логику скриптов следует хранить в основном приложении. Рекомендуется, чтобы AssetBundle имел размер не более 64 МБ. Это помогает сократить время загрузки и минимизировать использование места на устройстве.

Включение ресурсов по требованию

Чтобы настроить проект на использование ODR, выполните следующие действия:

  1. Перейти к Изменить > Project Настройки > Игрок > iOS > Другие настройки.
  2. В разделе Конфигурация включите Использовать ресурсы по требованию.

Создать AssetBundle

Чтобы создать AssetBundle, выполните следующие действия:

  1. Создайте новую папку для группировки ассетов, которые вы хотите поместить в AssetBundle. Для этого щелкните правой кнопкой мыши папку Ассеты в окне Project и перейдите в Создать > Папки.
  2. Назовите новую папку.
  3. Выберите файлы Asset, которые вы хотите добавить в AssetBundle, а затем перетащите их в новую папку.
  4. В новой папке создайте три дополнительные папки с именами Bundles, ODRи Editor.

Метка AssetBundle

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

Чтобы создать и назначить метку, выполните следующие действия.

  1. Выберите папку, в которой вы группируете свои ресурсы.
  2. В окне Inspector в разделе Метки активов щелкните раскрывающееся меню слева и выберите Новый.
  3. Введите название новой метки строчными буквами.

Добавить метку к AssetBundle.

Чтобы создать новый файл AssetBundle, необходимо сделать ссылку на новую метку в скрипте Редактора. Чтобы создать скрипт Редактора:

  1. Щелкните правой кнопкой мыши папку Редактор и выберите Создать > MonoBehaviour Сценарий.
  2. Назовите новый скрипт BuildiOSAssetBundles.

Откройте BuildiOSAssetBundles.cs и скопируйте в следующий пример кода. В этом примере используется метка textures. Измените это на всей протяженности с именем вашей метки в строчных буквах.

Примечание: В этом примере используются несжатые пакеты, но это не является требованием для использования тонирования приложений.

using UnityEngine;
using UnityEditor;


public class BuildiOSAssetBundles : MonoBehaviour
{
    [InitializeOnLoadMethod]
    static void SetupResourcesBuild( )
    {
        UnityEditor.iOS.BuildPipeline.collectResources += CollectResources;
    }

    static UnityEditor.iOS.Resource[] CollectResources( )
    {
        return new UnityEditor.iOS.Resource[]
        {
            new UnityEditor.iOS.Resource( "textures", "Assets/ODR/textures" ).AddOnDemandResourceTags( "textures" ),
            new UnityEditor.iOS.Resource( "bundle", "Assets/Bundles/bundle.unity3d" ).AddOnDemandResourceTags( "bundle" ),
        };
    }

    [MenuItem( "Bundle/Build iOS AssetBundle" )]
    static void BuildAssetBundles( )
    {
        var options = BuildAssetBundleOptions.None;

        bool shouldCheckODR = EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS;

#if UNITY_TVOS
            shouldCheckODR |= EditorUserBuildSettings.activeBuildTarget == BuildTarget.tvOS;
#endif

        if( shouldCheckODR )
        {
#if ENABLE_IOS_ON_DEMAND_RESOURCES
            if( PlayerSettings.iOS.useOnDemandResources )
                options |= BuildAssetBundleOptions.UncompressedAssetBundle;
#endif

#if ENABLE_IOS_APP_SLICING
            options |= BuildAssetBundleOptions.UncompressedAssetBundle;
#endif
        }

        BuildPipeline.BuildAssetBundles( "Assets/ODR", options, EditorUserBuildSettings.activeBuildTarget );
    }

}

Следующая строка в предыдущем примере кода берёт файлы, помеченные меткой textures, и создает файл AssetBundle с именем textures в папке Assets/ODR:

new UnityEditor.iOS.Resource( "textures", "Assets/ODR/textures" ).AddOnDemandResourceTags( "textures" )

Для демонстрационных целей, предыдущий пример кода также включает следующую строку, которая добавляет AssetBundle называемый пакет, который уже построен — например, из другого проекта или стороннего поставщика:

new UnityEditor.iOS.Resource( "bundle", "Assets/Bundles/bundle.unity3d" ).AddOnDemandResourceTags( "bundle" )

Весь образец кода создает новое меню в панели меню Unity Editor. Перейдите в Пакет > Сборка AssetBundle для iOS для создания AssetBundles в папке ODR.

Загрузить AssetBundle

После того, как вы создали AssetBundles, вы должны загрузить их в приложение.

Создать скрипт в папке Assets с названием LoadBundle.cs и скопируйте следующий пример кода. Этот скрипт загружает AssetBundle текстур из ODR и присваивает его открытому члену TextureBundle.

using UnityEngine;
using UnityEngine.iOS;
using System;
using System.Collections;

public class LoadBundle : MonoBehaviour
{
    public AssetBundle     TextureBundle;


    void Start( )
    {
        LoadAssetAsync( "textures", "textures" );
    }

    public async Awaitable LoadAssetAsync( string resourceName, string odrTag )
    {
        // Create the request
        using(OnDemandResourcesRequest request = OnDemandResources.PreloadAsync( new string[] { odrTag } ))
        {
            // Wait until request is completed
            await request;

            // Check for errors
            if( request.error != null )
                throw new Exception( "ODR request failed: " + request.error );

            TextureBundle = AssetBundle.LoadFromFile( "res://" + resourceName );
        }
    }
}

Создание проекта Xcode

После создания и загрузки AssetBundles необходимо выполнить следующие действия:

  1. Создать Проект Xcode.
  2. В Xcode перейдите в Настройки сборки > Активы.
  3. Установите Встроить пакеты ресурсов в пакет продукта до Нети Включить ресурсы по требованию до Да.
  4. Создание пакета iOS App Store (IPA).
  5. Загрузите IPA в App Store Connect TestFlight.

Дополнительные ресурсы