0

I would like to load all subsprites of an assetbundle into a sprite list. My assetbundle is composed of sprite with SpriteMode equal to Multiple. My assetbundle is composed of sprite with SpriteMode equal to Multiple. My assetbundle is composed of sprite with SpriteMode equal to Multiple.

        CachedAssetBundle cached = new CachedAssetBundle();
        cached.name = StaticStrings.emojisBundleCached;
        using (WWW web = WWW.LoadFromCacheOrDownload(url, cached))
        {
            yield return web;

            AssetBundle remoteAssetBundle = web.assetBundle;

            while (!web.isDone) ;

            Debug.LogError(url);

            String[] names = remoteAssetBundle.GetAllAssetNames();

            foreach (String sp in names)
            {
                Debug.LogError(sp);

                AssetBundleRequest asset = remoteAssetBundle.LoadAssetWithSubAssetsAsync<Sprite>(sp);

                yield return asset;

                Debug.LogError("Size " + asset.allAssets.Length);

                foreach (Sprite s in asset.allAssets)
                {
                    Debug.LogError("Name sub " + s.name);
                }

                // GameManager.Instance.bundleListEmojis.Add(remoteAssetBundle.LoadAssetWithSubAssets<Sprite>(sp.name));
            }
            if (remoteAssetBundle == null)
            {
                Debug.LogError("Failed to download AssetBundle!");
                yield break;
            }
            remoteAssetBundle.Unload(false);
        }
derHugo
  • 83,094
  • 9
  • 75
  • 115
  • 1
    Just a side note: `while (!web.isDone) ;` .. yikes! And in general `WWW` is deprecated.. rather use [`UnityWebRequestAssetBundle`](https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequestAssetBundle.GetAssetBundle.html) – derHugo Jan 04 '22 at 21:08

1 Answers1

0

SOLUTION: USING DICTIONARY

            CachedAssetBundle cached = new CachedAssetBundle();
            cached.name = StaticStrings.emojisBundleCached;
            using (UnityWebRequest uwr = UnityWebRequestAssetBundle.GetAssetBundle(url, cached))
            {
                yield return uwr.SendWebRequest();

                if (uwr.result != UnityWebRequest.Result.Success)
                {
                    Debug.Log(uwr.error);
                }
                else
                {
                    AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(uwr);

                    String[] names = bundle.GetAllAssetNames();

                    foreach (String spriteName in names)
                    {

                        AssetBundleRequest asset = bundle.LoadAssetWithSubAssetsAsync<Sprite>(spriteName);

                        yield return asset;

                        List<Sprite> listSprite = new List<Sprite>();

                        foreach (Sprite sprite in asset.allAssets)
                        {
                            listSprite.Add(sprite);
                        }
                        GameManager.Instance.dicEmojisAnim.Add(spriteName, listSprite);
                    }
                    bundle.Unload(false);
                }
            }