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

应用程序切片

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

创建变体

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

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