Example #1
0
    static public void UnpackAsset()
    {
        AssetBundleView wnd = ScriptableObject.CreateInstance <AssetBundleView>();

        wnd.ShowUtility();
        wnd.titleContent = new GUIContent("View asset bundle");
        wnd.position     = new Rect(100, 50, Screen.width - 600, Screen.height - 200);
    }
        private IEnumerator Donwload()
        {
            var url = preUrl + postUrl;

            if (String.IsNullOrEmpty(postUrl))
            {
                Debug.LogError("このURLは無効です");
                yield break;
            }
            else
            {
                Debug.Log("ダウンロード先:\n" + url);
            }

            using (var request = UnityWebRequest.GetAssetBundle(url))
            {
                yield return(request.Send());

                while (!request.isDone)
                {
                    if (request.isError)
                    {
                        Debug.LogError(request.error);
                        yield break;
                    }

                    yield return(null);
                }

                if (request.responseCode != 200)
                {
                    if (request.responseCode == 404)
                    {
                        Debug.LogError("そのURLは無効です");
                    }
                    else
                    {
                        Debug.LogError("エラーです");
                    }

                    yield break;
                }

                var bundle = ((DownloadHandlerAssetBundle)request.downloadHandler).assetBundle;
                if (bundle == null)
                {
                    yield break;
                }

                if (dataBase == null)
                {
                    Debug.LogError("設定ファイルが存在しません");
                    yield break;
                }

                var allAssets = bundle.LoadAllAssets();

                var prefabAssets = allAssets.Where(obj => obj is GameObject)
                                   .Cast <GameObject>()
                                   .ToArray();
                if (prefabAssets.Any())

                {
                    dataBase.LoadAssetBundle(AssetType.Prefab, prefabAssets);
                }

                var materialAssets = allAssets.Where(obj => obj is Material)
                                     .Cast <Material>()
                                     .ToArray();
                if (materialAssets.Any())

                {
                    dataBase.LoadAssetBundle(AssetType.Material, materialAssets);
                }

                var spriteAssets = allAssets.Where(obj => obj is Sprite)
                                   .Cast <Sprite>()
                                   .ToArray();

                if (spriteAssets.Any())
                {
                    dataBase.LoadAssetBundle(AssetType.Sprite, spriteAssets);
                }

                var soundAssets = allAssets.Where(obj => obj is AudioClip)
                                  .Cast <AudioClip>()
                                  .ToArray();
                if (soundAssets.Any())
                {
                    dataBase.LoadAssetBundle(AssetType.Sound, soundAssets);
                }

                var otherAssets = allAssets.Where(obj => !(obj is GameObject))
                                  .Where(obj => !(obj is Material))
                                  .Where(obj => !(obj is Sprite))
                                  .Where(obj => !(obj is AudioClip))
                                  .ToArray();

                if (otherAssets.Any())
                {
                    dataBase.LoadAssetBundle(AssetType.Other, otherAssets);
                }

                AssetBundleView.Open();
                bundle.Unload(false);
            }
        }