Version: Unity 6.0 (6000.0)
言語 : 日本語
App Thinning
App Slicing

オンデマンドリソース

オンデマンドリソース (ODR) は、iOS と tvOS で使用可能な機能で、アプリケーションのサイズを削減できます。アプリケーションの起動時から必要なコアアセットと、任意またはゲームですぐに使用しないアセットを分けることでサイズを削減します。アセットバンドル と呼ばれるこれらの追加アセットは、すべての Unity ビルドターゲットで使用できます。ただし、App Store でホストできるようにするには、追加のステップを実行する必要があります。

アセットバンドルにはモデルやマテリアル、テクスチャ、シーンなどのアセットファイルを追加できますが、スクリプトを追加することはできません。そのため、スクリプトロジックはメインアプリケーションに保存します。アセットバンドルのサイズは最大 64MB までにすることが推奨されています。これにより、ロード時間が短縮され、デバイスで使用するストレージスペースを最小化できます。

オンデマンドリソースの有効化

ODR を使用するようにプロジェクトを設定するには、以下のステップを実行します。

  1. Edit > Project Settings > Player > iOS > Other Settings の順に移動します。
  2. Configuration セクションで、Use on-demand resources を有効にします。

アセットバンドルの作成

アセットバンドルを作成するには、以下のステップを実行します。

  1. アセットバンドルに入れたいアセットをまとめるための新しいフォルダーを 1 つ作成します。作成するには、Project ウィンドウの Assets フォルダー内で右クリックし、Create > Folder の順に選択します。
  2. 新しいフォルダーに名前を付けます。
  3. アセットバンドルに追加したいアセットファイルを選択し、新しく作成したフォルダーにドラッグアンドドロップします。
  4. 新しいフォルダーに、BundlesODREditor という名前の 3 つのフォルダーを作成します。

アセットバンドルのタグ付け

アセットバンドルを作成する際は、アセットバンドルのダウンロードをリクエストするときに識別できるタグを割り当てる必要があります。アセットバンドルのファイル名と一致するラベルを作成することをお勧めします。

タグを作成して割り当てるには、以下のステップを実行します。

  1. アセットをまとめるフォルダーを選択します。
  2. Inspector ウィンドウの Asset Labels セクションで、左側のドロップダウンメニューをクリックし、New を選択します。
  3. 新しいラベルの名前を小文字で入力します。

アセットバンドルへのタグの追加

新しいアセットバンドルファイルを生成するには、エディタースクリプトで新しいラベルを参照する必要があります。エディタースクリプトを作成するには以下を実行します。

  1. Editor フォルダーを右クリックし、Create > MonoBehaviour Script の順に選択します。
  2. 新規スクリプトに BuildiOSAssetBundles という名前を付けます。

BuildiOSAssetBundles.cs を開き、以下のコードサンプルをコピーします。この例では、ラベル textures を使用しています。使用したい小文字のラベル名にすべて変更してください。

ノート: この例では非圧縮バンドルを使っています。ただし、これは App Thinning の使用要件ではありません。

using UnityEngine;
using UnityEditor;


public class BuildiOSAssetBundles : 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", "Assets/ODR/textures" ).AddOnDemandResourceTags( "textures" ),
            new UnityEditor.iOS.Resource( "bundle", "Assets/Bundles/bundle.unity3d" ).AddOnDemandResourceTags( "bundle" ),
        };
    }

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

}

上のコードサンプルの以下の行は、textures ラベルでタグ付けされたファイルを取得し、Assets/ODR フォルダー内に textures というアセットバンドルファイルを作成します。

new UnityEditor.iOS.Resource( "textures", "Assets/ODR/textures" ).AddOnDemandResourceTags( "textures" )

デモの目的で、上のコードサンプルには、以下の行も含まれています。この行は、すでにビルドされている (例えば、別のプロジェクトやサードパーティのベンダーから取得した) bundle というアセットバンドルを加えます。

new UnityEditor.iOS.Resource( "bundle", "Assets/Bundles/bundle.unity3d" ).AddOnDemandResourceTags( "bundle" )

このサンプルコード全体によって、Unity エディターのメニューバーに新しいメニューアイテムが作成されます。Bundle > Build iOS AssetBundle の順に選択して、ODR フォルダーにアセットバンドルを生成します。

アセットバンドルのロード

アセットバンドルを生成したら、アプリケーションにロードする必要があります。

Assets フォルダーに LoadBundle.cs というスクリプトを作成し、以下のコードサンプルをコピーします。以下のスクリプト例は textures ODR アセットバンドルをダウンロードし、パブリックメンバーの TextureBundle に割り当てます。

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

public class LoadBundle : MonoBehaviour
{
    public AssetBundle     TextureBundle;


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

    public async Awaitable LoadAssetAsync( 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 );
        }
    }
}

Xcode プロジェクトの生成

アセットバンドルを作成してロードしたら、以下のステップを実行する必要があります。

  1. Xcode プロジェクト を作成します。
  2. Xcodeで、Build Settings > Assets の順に移動します。
  3. Embed Asset Packs In Product BundleNo に設定し、Enable On Demand ResourcesYes に設定します。
  4. iOS App Store パッケージ (IPA) をビルドします。
  5. App Store Connect の TestFlight に IPA をアップロードします。

追加リソース

App Thinning
App Slicing
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961