App Slicing では、アプリを実行しているデバイスの仕様に従って、アセットを動的にダウンロードできます。例えば、大きなデバイス用に高解像度アセット、小さなデバイス用に低解像度アセットをダウンロードできます。App Slicing を使用するには、バリアントの追加プロビジョニングを含めて、アセットバンドルを定義します。どのバリアントを起動時に使用して、ダウンロード時にそれをアセットファイル名に自動でアペンドするのかを決めることができます。
バリアントを作成するには、以下の手順に従います。
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 );
}
}
}
特定のデバイスや、設定されたメモリ制限を超えるデバイスで、バリアントを使用したい場合があります。それには、使用する各バリアントの設定を変更できます。
バリアントを変更するには、Player Settings > Other Settings > Configuration に移動して、Variant map for app slicing を展開します。
ノート: Player Settings > Other > Configuration で Use on demand resources を有効にすると、Variant map for app slicing のオプションが表示されます。
| 設定 | 説明 | |
|---|---|---|
| Variant name | 起動スクリプトのバリアントの名前を表示します。 | |
| Device | このバリアントの対象デバイスを選択します。 | |
| Memory | このバリアントに必要な最小メモリを選択します。 | |
| グラフィックス | このバリアントで使用する Metal framework を選択します。 | |
| Display color space | このバリアントに使用する色域を選択します。 | |
| Add custom entry | Add custom entry をクリックして、独自のカスタム設定と値を追加します。 | |
| キー | 設定名を入力します。 | |
| 値 | この設定の値を入力します。 | |