docs.unity3d.com
    目次を表示する/隠す

    AssetBundle のロード

    Addressables システムではアセットが AssetBundle にパックされ、個々のアセットをロードするときに、その AssetBundle が "舞台裏" でロードされます。AssetBundle がどのようにロードされるかは、BundledAssetGroupSchema クラスで開放されるオプションを通じて制御できます。これらのオプションは、スクリプティング API を通じて設定するか、AddressablesAssetGroup インスペクターの Advanced Options (詳細オプション) で設定できます。

    UnityWebRequestForLocalBundles

    Addressables には、AssetBundle をロードするために使用できるエンジン API として、UnityWebRequest.GetAssetBundle と AssetBundle.LoadFromFileAsync の 2 つがあります。デフォルトの動作では、AssetBundle がローカルストレージにある場合は AssetBundle.LoadFromFileAsync が使用され、AssetBundle パスが URL の場合は UnityWebRequest が使用されます。

    BundledAssetGroupSchema.UseUnityWebRequestForLocalBundles を true に設定すると、この動作をオーバーライドして、ローカル AssetBundle に UnityWebRequest を使用できます。これは、BundledAssetGroupSchema GUI を使用して設定することもできます。

    この設定は、以下のような状況で役立ちます。

    1. 出荷するゲームパッケージのサイズを可能な限り小さくするために、LZMA 圧縮を使用する ローカル AssetBundle を出荷している場合。この場合は、UnityWebRequest を使用して、これらの AssetBundle を LZ4 に再圧縮してローカルディスクキャッシュ内に配置できます。
    2. Android 版ゲームを出荷していて、その APK に、デフォルトの APK 圧縮で圧縮された AssetBundle が含まれている場合。
    3. ディスクシークを回避するために、ローカル AssetBundle 全体がメモリにロードされるようにする場合。キャッシュを無効にして UnityWebRequest を使用すると、AssetBundle ファイル全体がメモリキャッシュにロードされます。これにより、ランタイムのメモリ使用量は増加しますが、AssetBundle の初回のロード後はディスクシークが発生しないため、ロードのパフォーマンスが向上する可能性があります。 上記の 1 と 2 の状況では、プレイヤーのデバイスに AssetBundle が 2 つ (元のバンドルとキャッシュされたバンドル) 存在する結果となります。つまり、初回のロード (解凍とキャッシュへのコピー) には、以降のロード (キャッシュからのロード) より時間がかかります。

    ダウンロードエラーの処理

    ダウンロードが失敗すると、RemoteProviderException にエラーが示されます。これを使用して、失敗の処理方法を決定することができます。 RemoteProviderException は、AsyncOperationHandle.OperationException か内部例外のどちらかです。以下に例を示します。

    
    using UnityEngine;
    using UnityEngine.AddressableAssets;
    using UnityEngine.ResourceManagement.AsyncOperations;
    using UnityEngine.ResourceManagement.Exceptions;
    
    internal class HandleDownloadError : MonoBehaviour
    {
        private AsyncOperationHandle m_Handle;
    
        void LoadAsset()
        {
            m_Handle = Addressables.LoadAssetAsync<GameObject>("addressKey");
            m_Handle.Completed += handle =>
            {
                string dlError = GetDownloadError(m_Handle);
                if (!string.IsNullOrEmpty(dlError))
                {
                    // handle what error
                }
            };
        }
    
        string GetDownloadError(AsyncOperationHandle fromHandle)
        {
            if (fromHandle.Status != AsyncOperationStatus.Failed)
                return null;
    
            RemoteProviderException remoteException;
            System.Exception e = fromHandle.OperationException;
            while (e != null)
            {
                remoteException = e as RemoteProviderException;
                if (remoteException != null)
                    return remoteException.WebRequestResult.Error;
                e = e.InnerException;
            }
    
            return null;
        }
    }
    
    

    返される可能性のあるエラー文字列は以下のとおりです。

    • "Request aborted" (リクエストが中止されました)
    • "Unable to write data" (データを書き込むことができません)
    • "Malformed URL" (URL の形式が不正です)
    • "Out of memory" (メモリが不足しています)
    • "No Internet Connection" (インターネットに接続していません)
    • "Encountered invalid redirect (missing Location header?)" (無効なリダイレクトが発生しました (Location ヘッダーがない可能性))
    • "Cannot modify request at this time" (現在、リクエストを変更できません)
    • "Unsupported Protocol" (サポートされていないプロトコルです)
    • "Destination host has an erroneous SSL certificate" (宛先ホストの SSL 証明書が正しくありません)
    • "Unable to load SSL Cipher for verification" (SSL 暗号をロードして検証することができません)
    • "SSL CA certificate error" (SSL CA 証明書エラーです)
    • "Unrecognized content-encoding" (認識できないコンテンツエンコーディングです)
    • "Request already transmitted" (リクエストは既に送信されています)
    • "Invalid HTTP Method" (無効な HTTP メソッドです)
    • "Header name contains invalid characters" (ヘッダー名に無効な文字が含まれています)
    • "Header value contains invalid characters" (ヘッダー値に無効な文字が含まれています)
    • "Cannot override system-specified headers" (システムで指定されたヘッダーをオーバーライドできません)
    • "Backend Initialization Error" (バックエンドの初期化エラーです)
    • "Cannot resolve proxy" (プロキシを解決できません)
    • "Cannot resolve destination host" (宛先ホストを解決できません)
    • "Cannot connect to destination host" (宛先ホストに接続できません)
    • "Access denied" (アクセスが拒否されました)
    • "Generic/unknown HTTP error" (一般的/不明な HTTP エラーです)
    • "Unable to read data" (データを読み取ることができません)
    • "Request Timeout" (リクエストがタイムアウトしました)
    • "Error during HTTP POST transmission" (HTTP POST の送信中にエラーが発生しました)
    • "Unable to complete SSL connection" (SSL 接続を完了できません)
    • "Redirect limit exceeded" (リダイレクト制限を超えました)
    • "Received no data in response" (受信した応答にデータがありません)
    • "Destination host does not support SSL" (宛先ホストが SSL をサポートしていません)
    • "Failed to transmit data" (データを送信できませんでした)
    • "Failed to receive data" (データを受信できませんでした)
    • "Login failed" (ログインできませんでした)
    • "SSL shutdown failed" (SSL シャットダウンに失敗しました)
    • "Redirect limit is invalid" (リダイレクト制限が無効です)
    • "Not implemented" (実装されていません)
    • "Data Processing Error, see Download Handler error" (データ処理エラーです。ダウンロードハンドラーのエラーを参照してください)
    • "Unknown Error" (不明なエラーです)
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)