Version: Unity 6.0 (6000.0)
语言 : 中文
按需加载资源
Apple 的隐私清单政策要求

应用程序切片

应用程序切片允许根据运行应用程序的设备规格动态下载资源。例如,应用程序切片可以为大屏幕设备下载高分辨率资源,为小屏幕设备下载低分辨率资源。这是通过定义 AssetBundles 并添加变体来实现的。您可以在启动时决定使用哪种变体,并在下载时自动将其附加到资源文件名。

创建变体

要创建变体,请使用以下步骤:

  1. 单击您的 AssetBundle 文件夹,然后导航到检视面板窗口底部的资源标签 (Asset Labels) 部分。
  2. 单击右侧下拉菜单,选择新建 (New),然后输入新变体的名称。AssetBundle 变体必须为小写字母。
  3. 在 Unity 编辑器文件夹中创建一个名为 BuildiOSAppSlices.cs 的新脚本。
  4. 复制并粘贴以下代码,将示例标签 textures 和变体 hdsd 替换为您自己的代码。在此代码示例中,引用了多个文件夹:一个包含高清纹理,一个包含标准清晰度纹理。它们分别被赋予了变体 hdsd
using UnityEngine;
using UnityEditor;


public class BuildiOSAppSlices : 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").BindVariant( "Assets/ODR/textures.hd", "hd" )
                                     .BindVariant( "Assets/ODR/textures.sd", "sd" )
                     .AddOnDemandResourceTags( "textures" ),
    };
    }

    [MenuItem( "Bundle/Build iOS App Slices" )]
    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 );
    }

}

这段代码将在 Unity 编辑器菜单栏中创建一个名为 Bundle 的新菜单。单击该菜单并选择构建 iOS 应用程序切片 (Build iOS App Slices)。此时将在 ODR 文件夹中生成 AssetBundles。

加载资源

要加载资源,请在 Assets 文件夹中创建一个名为 LoadBundle.cs 的脚本文件,然后复制以下代码。将 textures 替换为要加载的变体的名称。

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

public class LoadBundle : MonoBehaviour
{
    public AssetBundle     TextureBundle;


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

    public IEnumerator LoadAsset( 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 );

        }
    }
}

修改变体

有时,您可能希望在特定设备或内存超出设定限制的设备上使用特定变体。为此,您可以更改所使用的每个变体的设置。

要修改变体,请导航到播放器设置 (Player Settings) > 其他设置 (Other Settings) > 配置 (Configuration) 并展开应用切片变体映射 (Variant map for app slicing)

注意:在播放器设置 (Player Settings) > 其他 (Other) > 配置 (Configuration) 中启用使用按需加载资源 (Use on demand resources) 可以查看应用切片变体映射选项。

设置 描述
Variant name 显示加载脚本中变体的名称。
设备 选择此变体所针对的设备。
内存 选择此变体所需的最小内存。
图形 选择要与此变体一起使用的金属框架
Display color space 选择要用于此变体的色域。
添加自定义条目 单击添加自定义条目 (Add custom entry) 以添加您自己的自定义设置和值。
输入该设置的名称。
输入该设置的值。

其他资源

按需加载资源
Apple 的隐私清单政策要求