Пример #1
0
        /// <summary>
        /// 加载
        /// </summary>
        /// <param name="_operation"></param>
        /// <returns></returns>
        IEnumerator Start(UAsyncOperation _operation, Func <byte[], byte[]> _unpackKeystore, Action <bool> _finished)
        {
            IsSuccess = _operation != null;
            Request   = _operation;
            Info      = new List <UFileVersionRemote>();
            if (Request != null)
            {
                yield return(Request);

                string content = GetContent(Request, _unpackKeystore);
                if (string.IsNullOrEmpty(content))
                {
                    Debug.LogError("The Version Content is invalid!");
                    IsSuccess = false;
                    yield break;
                }

                var list = JsonUtility.FromJson <FileVersionRemoteObject>(content);

                if (list != null && list.List != null)
                {
                    Info.AddRange(list.List);
                }
                else
                {
                    Debug.LogError("The Version Content dose not came from json!");
                    IsSuccess = false;
                }

                _finished?.Invoke(IsSuccess);
            }
            yield break;
        }
        IEnumerator Start(string _assetName, Type _type, List <UAssetBundleCreateRequest> _list, Action <UnityEngine.Object> _callback)
        {
            float rate = 1f / _list.Count;

            foreach (var v in _list)
            {
                yield return(v);

                ValueProgress += rate;
            }

            ValueProgress = 1f;

            var header = _list[0];

            if (header.AssetBundle != null)
            {
                var request = header.AssetBundle.LoadAssetAsync(_assetName, _type);
                Request = new UAsyncOperationUnity(request);
                yield return(request);

                Result = request.asset;

                _callback?.Invoke(Result);
                ValueProgress = 1.1f;
            }
            else
            {
                ValueProgress = 2.1f;
            }

            yield break;
        }
Пример #3
0
        IEnumerator Start(IStage _stage, Action <IStage> _finished)
        {
            Request = _stage.Load();
            yield return(Request);

            Request = new UAsyncOperationDone();
            _finished?.Invoke(_stage);
            yield return(new WaitForEndOfFrame());

            Completed?.Invoke(_stage as UStage);
            Completed = null;
        }
Пример #4
0
        /// <summary>
        /// 获取下载数据的抽象过程
        /// </summary>
        /// <param name="_operation"></param>
        /// <returns></returns>
        string GetContent(UAsyncOperation _operation, Func <byte[], byte[]> _unpackKeystore)
        {
            UDownloadRequest request = _operation as UDownloadRequest;

            byte[] binary;
            if (_unpackKeystore != null)
            {
                binary = _unpackKeystore(request.Bytes);
            }
            else
            {
                binary = request.Bytes;
            }

            if (binary != null)
            {
                return(Encoding.Default.GetString(binary));
            }
            else
            {
                return("");
            }
        }