应用切片允许您根据应用程序运行的设备规格动态下载资源。例如,应用切片可以为较大的设备下载高分辨率资源,为较小的设备下载低分辨率资源。应用切片通过定义资源包以及添加变体来实现。您可以在启动时决定使用哪个变体,并在下载时自动将其附加到资源文件名。
要创建变体,请按照以下步骤操作
BuildiOSAppSlices.cs
的新脚本。textures
和变体hd
和sd
替换为您自己的。在此代码示例中,引用了多个文件夹:一个包含 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的新菜单。点击此菜单并选择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 框架。 | |
显示色彩空间 | 选择要与此变体一起使用的色域。 | |
添加自定义条目 | 点击添加自定义条目以添加您自己的自定义设置和值。 | |
键 | 输入设置的名称。 | |
值 | 输入此设置的值。 |