解決策: Unity: アセット バンドルのダウンロード中にエラーが発生しました: キャッシュ データを移動できませんでした問題

目次

質問:

試す

問題が解決しました

私の説明


質問:


         最近、ゲームを起動しようとしているときに、ある現象を発見しました。一部のモデルでは、起動時にクラッシュしたり、黒い画面が表示されます。確率は約 5% です。Bugly によると、この現象は特定のモデルのみに発生するそうです。実際、実際の状況はこれよりもはるかに深刻です 時々バグ この状況を捉えることができず、私たちはさまざまな疑問と調査を行い、最終的に問題の原因を突き止めました。

問題のログは次のとおりです。

2-18 15:04:10.924 28696 30223 E Unity : 書き込み用にアーカイブ ファイルを開けません: '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp /0b2da51ac602117b08efce711b40391f/__data'
12-18 15:04:10.924 28696 30144 E Unity : アセット バンドルのダウンロード中にエラーが発生しました: アセット バンドルのデータを解凍できませんでした 'jar:file:///data/app/~~mqBnkrTVeHx0R5PQj6Z lhw==/com .xfp.hnsz.ks.xwdxy.cs-ujHBQxE6h_IEHhAMfYKUNA==/base.apk!/assets/assets-art-atlas-achievement.spriteatlasv2_assets_all_fb282f19f9eb9a06452ff40988043469.bundle」。
12-18 15:04:10.927 28696 30148 E Unity : キャッシュ ファイル「/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/1678b268885c708b6b23968c60116b1a」を移動できません'/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Shared/c145b22e3c49b6b6064231a90d5e684c/48c0472eecd6b114bfc238bd99e509c4' へ: エラー コード - 1
12-18 1 5:04:10.927 28696 30148 E Unity : アセット バンドルのダウンロード中にエラーが発生しました: キャッシュ データ '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/1678b268885c708b6b23968c60116b1a' を所定の場所に移動できませんでしたアセットバンドル「jar:file:///」をキャッシュするときの /storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Shared/c145b22e3c49b6b6064231a90d5e684c/48c0472eecd6b114bfc238bd99e509c4'データ/アプリ/~~ mqBnkrTVeHx0R5PQj6Zlhw==/com.xfp.hnsz.ks.xwdxy.cs-ujHBQxE6h_IEHhAMfYKUNA==/base.apk!/assets/icon_fr_eye.png_48c0472eecd6b114bfc238bd99e509c4.bundle」。
12-18 15:04:10.927 28696 30149 E Unity : キャッシュ ファイル「/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/eda9c7b7cbb31ddf2be58ac700e478d6」を移動できません'/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Shared/c64d4e8d8e84733e1a9638e93f484830/1627a372980ad47ae64c100b39449f60' へ: エラー コード - 1
12-18 15:04:10.927 28696 30149 E Unity: アセット バンドルのダウンロード中にエラーが発生しました: キャッシュ データ '/storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Temp/eda9c7b7cbb31ddf2be58ac700e478d6' を所定の場所に移動できませんでしたアセットバンドル「jar:file://」をキャッシュするときの /storage/emulated/0/Android/data/com.xfp.hnsz.ks.xwdxy.cs/files/UnityCache/Shared/c64d4e8d8e84733e1a9638e93f484830/1627a372980ad47ae64c100b39449f60' /データ/アプリ/~~ mqBnkrTVeHx0R5PQj6Zlhw==/com.xfp.hnsz.ks.xwdxy.cs-ujHBQxE6h_IEHhAMfYKUNA==/base.apk!/assets/icon_mca_up.png_1627a372980ad47ae64c100b39449f60.bundle」。
12-18 15:04:11.222 28696 30025 E Unity : UnityWebRequestException: データ処理エラー、ダウンロード ハンドラー エラーを参照
12-18 15:04:11.222 28696 30025 E Unity : System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] ] <0000000000000000000000000000000>:0
12-18 15:04:11.222 28696 30025 E Unity : Cysharp.Threading.Tasks.UnityAsyncExtensions+UnityWebRequestAsyncOperationConfiguredSource.GetResult (System.Int16 トークン) [0x00000] in <000000000000000000000000000 00000>:0

 ログから、unityActivity が開始されるとすぐに更新ファイルのダウンロードが開始されたことがわかりました (つまり、wake 関数で UnityWebRequest 関数を呼び出して、StreamingAssets の初期パッケージのアセットバンドルを書き込み可能なサンドボックス ディレクトリにコピーしました)。爆発の可能性は低いですが、上記と同様の質問です。       

試す

        Unity のストレージのストレージ権限の問題であると考えられたため、インストール ディレクトリを外部 (SDCard) 拡張カードに配置しました。デフォルトは内部 (サンドボックス ディレクトリ) です。

        

そして、エクスポートされた Android プロジェクトのマニフェスト ファイル (AndroidManifest.xml) で拡張カードのアクセス許可を有効にします。

        READ_EXTERNAL_STORAGE (外部メモリの読み取り)

        WRITE_EXTERNAL_STORAGE (外部メモリへの書き込み

しかし、ゲームの発売後に拡張カードのストレージ許可を申請することは準拠しておらず、ユーザーのインストールやリードの変換に役立たないとパブリッシャーが主張したため、最終的にこの方法を放棄しました。

問題が解決しました

最初からやり直して、最終的に公式 Web サイトでCaching.readyを見つけました。

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class Example : MonoBehaviour
{
    IEnumerator IsCachingReadyExample(string uri)
    {
        //Using this conditional says we want to wait for our Caching system to be ready before trying to download bundles
        while (!Caching.ready)
        {
            yield return null;
        }
        //Download the bundle
        UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);
        yield return request.SendWebRequest();
        AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);

        //Do something with the AssetBundle...
    }
}

UnityWebRequest のassetbundleの前に文 Caching.ready を追加すると、問題は最終的に解決されます。

        実際、ログには、ファイルの書き込み時にファイルをキャッシュに書き込むことができないことが示されています。Unity はキャッシュのメカニズムと、cache.ready がいつ準備できるかについてあまり明確に書いていないためです (おそらく公式に書かれていますが、ソースは見つかりませんでした)。

私の説明

        キャッシュの場合、Unity はUnityActivity の開始時にキャッシュを適用する必要がありますが、非同期またはウェイク後に行う必要があります。ダウンロード更新はウェイクの最初の行でダウンロードを開始し、非同期操作です。このとき、一定の確率でキャッシュはキャッシュされません。初期化が完了していません。上記のエラーが一定の確率で発生する原因となるすべての理由。

        キャッシュの詳しいドキュメントやcache.ready=trueのタイミングを見つけたら、ぜひ教えてください。

おすすめ

転載: blog.csdn.net/lejian/article/details/135466138