版本:Unity 6 (6000.0)
语言:English
按需资源
Apple 的隐私清单策略要求

应用切片

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

创建变体

要创建变体,请按照以下步骤操作

  1. 点击您的资源包文件夹,然后导航到检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
    参见 术语表
    窗口底部的资源标签部分。
  2. 点击右侧的下拉菜单,选择新建,然后输入新变体的名称。资源包变体必须为小写。
  3. 在 Unity 编辑器文件夹中创建一个名为BuildiOSAppSlices.cs的新脚本。
  4. 复制并粘贴以下代码,将示例标签textures和变体hdsd替换为您自己的。在此代码示例中,引用了多个文件夹:一个包含 HD 纹理,另一个包含 SD 纹理。这些文件夹已分别赋予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的新菜单。点击此菜单并选择Build iOS App Slices。这将在ODR文件夹中生成资源包。

加载资源

要加载资源,请在您的 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 );

        }
    }
}

修改变体

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

要修改变体,请导航到播放器设置 > 其他设置 > 配置,然后展开应用切片的变体映射

注意:在播放器设置 > 其他 > 配置中启用使用按需资源以查看应用切片的变体映射选项。

设置 描述
变体名称 显示加载脚本中变体的名称。
设备 选择此变体目标的设备。
内存 选择此变体所需的最小内存。
图形 选择要与此变体一起使用的Metal 框架
显示色彩空间 选择要与此变体一起使用的色域。
添加自定义条目 点击添加自定义条目以添加您自己的自定义设置和值。
输入设置的名称。
输入此设置的值。

其他资源

按需资源
Apple 的隐私清单策略要求