Beispiel #1
0
        protected IEnumerator LoadAssetBundle(string url,
                                              UnityAction <string, AssetBundle> onSucceed = null,
                                              UnityAction onFailed = null,
                                              AssetBundleAnsyLoadListener actionListener = null)
        {
            using (UnityWebRequest www = UnityWebRequest.Get(url))
            {
                var downloadHandler = new DownloadHandlerAssetBundle(url, 0);
                www.downloadHandler = downloadHandler;

                var webRequest = www.SendWebRequest();
                if (null != actionListener)
                {
                    actionListener.items.Add(webRequest);
                }

                yield return(webRequest);

                var bundleName = System.IO.Path.GetFileNameWithoutExtension(url);

                if (!www.isDone)
                {
                    Debug.LogFormat("download:[<color=#00ffff>{0}</color>] failed ...", bundleName);
                    if (null != onFailed)
                    {
                        onFailed.Invoke();
                    }
                    yield break;
                }

                if (!string.IsNullOrEmpty(www.error))
                {
                    Debug.LogFormat("download:[<color=#00ffff>{0}</color>]:failed:[{1}]", bundleName, www.error);
                    if (null != onFailed)
                    {
                        onFailed.Invoke();
                    }
                    yield break;
                }

                if (null == downloadHandler.assetBundle)
                {
                    Debug.LogFormat("download:[<color=#00ffff>{0}</color>] failed assetbundle is null", bundleName);
                    if (null != onFailed)
                    {
                        onFailed.Invoke();
                    }
                    yield break;
                }

                Debug.LogFormat("download:[<color=#00ffff>{0}</color>] succeed", bundleName);
                if (null != onSucceed)
                {
                    onSucceed.Invoke(bundleName, downloadHandler.assetBundle);
                }
            }
        }
Beispiel #2
0
        protected IEnumerator LoadAssetBundles(string path, string[] bundleNames,
                                               UnityAction <string, AssetBundle> onBundleLoadSucceed = null,
                                               UnityAction onSucceed = null,
                                               UnityAction onFailed  = null,
                                               UnityAction <float> actionListener = null)
        {
            AssetBundleAnsyLoadListener listener = null;

            if (null != actionListener)
            {
                listener = new AssetBundleAnsyLoadListener
                {
                    items          = new List <UnityWebRequestAsyncOperation>(bundleNames.Length),
                    actionListener = actionListener,
                    amount         = bundleNames.Length,
                };
                ansyOperations.Add(listener);

                actionListener.Invoke(0.0f);
                yield return(null);
            }

            bool succeed = true;

            for (int i = 0; i < bundleNames.Length && succeed; ++i)
            {
                var url = System.IO.Path.Combine(path, bundleNames[i]);
                Debug.LogFormat("[download]:url:{0}", url);
                yield return(LoadAssetBundle(url, onBundleLoadSucceed, () => { succeed = false; }, listener));
            }

            var action = succeed ? onSucceed : onFailed;

            if (null != action)
            {
                action.Invoke();
            }

            if (succeed)
            {
                actionListener.Invoke(1.0f);
                yield return(null);
            }

            if (null != listener)
            {
                ansyOperations.Remove(listener);
            }
        }