コード例 #1
0
        private BaseAsset CreateAsset(AssetData data, ResObj resource)
        {
            if (resource == null || resource.Content == null)
            {
                JW.Common.Log.LogE("AssetManager.CreateAsset : invalid parameter - {0}", data.Name);
                return(null);
            }

            data.Callback = null;

            BaseAsset ba = data.Factory.CreateObject();

            if (ba == null)
            {
                JW.Common.Log.LogE("AssetManager.CreateAsset : failed to create asset - {0}", data.Name);
                return(null);
            }

            ba.BaseData = data;
            ba.Resource = resource;

            if (!AssetProcessor.ProcessCreate(ba))
            {
                JW.Common.Log.LogE("AssetManager.CreateAsset : failed to process create - {0}", data.Name);

                ba.BaseData.Callback = null;
                ba.BaseData.Factory  = null;
                ba.Resource          = null;
                data.Factory.DestroyObject(ba);
                return(null);
            }

            //AssetProcessor.ProcessAssociateResource(ba);

            return(ba);
        }
コード例 #2
0
        private IEnumerator AsynchronousLoad_LoadAssetBundle(JWObjList <string> stringList, JWArrayList <AssetData> assetDataList)
        {
            while (true)
            {
                stringList.Clear();
                assetDataList.Clear();
                for (int i = 0; i < _data.Count;)
                {
                    AssetData data = _data[i];
                    if (data.Priority != _loadAssetBundlePriority)
                    {
                        ++i;
                        continue;
                    }

                    _data.RemoveAt(i);

                    if (_assetManager.GetCacheCount(data.Name) >= data.Count)
                    {
                        if (data.Callback != null)
                        {
                            assetDataList.Add(data);
                        }
                        continue;
                    }

                    LoadData loadData;
                    loadData.Data            = data;
                    loadData.LoadBundleState = LoadStateLoading;
                    loadData.Request         = null;

                    bool insert = false;
                    for (int j = _resourceRequesting.Count - 1; j >= 0; --j)
                    {
                        if (_resourceRequesting[j].Data.Priority <= data.Priority)
                        {
                            _resourceRequesting.Insert(j + 1, loadData);
                            insert = true;
                            break;
                        }
                    }

                    if (!insert)
                    {
                        _resourceRequesting.Insert(0, loadData);
                    }

                    stringList.Add(data.Filename);

                    if (_loadAssetBundlePriority >= LoadPriority.Preprocess)
                    {
                        break;
                    }
                }

                yield return(null);

                if (stringList.Count > 0)
                {
#if USE_PACK_RES
                    BundleMediator.GetInstance().LoadBundle(stringList, OnBundleLoadCompleted);
#else
                    OnBundleLoadCompleted(stringList, true);
#endif
                }

                yield return(null);

                for (int i = 0; i < assetDataList.Count; i++)
                {
                    AssetData data = assetDataList[i];
                    if (data.Callback != null)
                    {
                        data.Callback.OnLoadAssetCompleted(data.Name, AssetLoadResult.Success, null);
                        yield return(null);
                    }
                }

                yield return(InstructionEnd);
            }
        }
コード例 #3
0
        /// <summary>
        /// 装载
        /// </summary>
        /// <param name="data">资产数据</param>
        /// <param name="clone">是否Clone一个副本</param>
        /// <returns>资产</returns>
        public BaseAsset Load(ref AssetData data, bool clone)
        {
            if (string.IsNullOrEmpty(data.Filename))
            {
                JW.Common.Log.LogE("AssetManager.Load : invalid parameter");
                return(null);
            }

            //缓存找
            BaseAsset ba = _cache.GetAsset(data.Name);

            if (ba != null)
            {
                //缓存复制
                if (clone)
                {
                    BaseAsset cloneBa = AssetProcessor.ProcessClone(ba);
                    _cache.AddAsset(ba);
                    ba = cloneBa;
                }

                if (ba != null)
                {
                    if (!AssetProcessor.ProcessCreate(ba))
                    {
                        JW.Common.Log.LogE("AssetManager.CreateAsset : failed to process create - {0}", data.Name);
                        ba.BaseData.Callback = null;
                        ba.BaseData.Factory  = null;
                        ba.Resource          = null;
                        data.Factory.DestroyObject(ba);
                        return(null);
                    }
                    _usingAsset.Add(ba);
                }
                return(ba);
            }

            //没在缓存 同步创建
            ResObj resource = ResService.GetResource(data.Filename);

            if (resource == null)
            {
                JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename);
                return(null);
            }

            if (resource.Content == null)
            {
                JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename);

                ResService.UnloadResource(resource);
                return(null);
            }

            ba = CreateAsset(data, resource);
            if (ba == null)
            {
                ResService.UnloadResource(resource);
                return(null);
            }

            if (clone)
            {
                BaseAsset cloneBa = AssetProcessor.ProcessClone(ba);
                _cache.AddAsset(ba);
                ba = cloneBa;
            }

            if (ba != null)
            {
                _usingAsset.Add(ba);
            }

            return(ba);
        }
コード例 #4
0
        /// <summary>
        /// 添加任务
        /// </summary>
        /// <param name="assetData">资源数据</param>
        public void AddTask(ref AssetData assetData)
        {
            if (assetData.Type == AssetType.UnityScene && assetData.Priority != LoadPriority.Wait)
            {
                JW.Common.Log.LogE("Loader.AddTask : invalid parameter - {0}", assetData.Name);
                assetData.Priority = LoadPriority.Wait;
            }

            if (_synLoading && (assetData.Priority == LoadPriority.Wait))
            {
                JW.Common.Log.LogE("Loader.AddTask : load is runing, can't add wait load asset - {0}", assetData.Name);
                return;
            }

            if (assetData.Priority != LoadPriority.Wait)
            {
                //进行中 重复
                for (int i = 0; i < _resourceRequesting.Count; i++)
                {
                    LoadData loadData = _resourceRequesting[i];
                    if (assetData.Type == loadData.Data.Type &&
                        assetData.Name.Equals(loadData.Data.Name, StringComparison.OrdinalIgnoreCase) &&
                        (assetData.Callback == loadData.Data.Callback))
                    {
                        loadData.Data = assetData;
                        _resourceRequesting.RemoveAt(i);

                        bool insert = false;
                        for (int j = _resourceRequesting.Count - 1; j >= 0; j--)
                        {
                            if (_resourceRequesting[j].Data.Priority <= loadData.Data.Priority)
                            {
                                _resourceRequesting.Insert(j + 1, loadData);
                                insert = true;
                                break;
                            }
                        }

                        if (!insert)
                        {
                            _resourceRequesting.Insert(0, loadData);
                        }

                        return;
                    }
                }
            }

            //重复?
            for (int i = 0; i < _data.Count; i++)
            {
                AssetData data = _data[i];

                if (assetData.Callback == data.Callback &&
                    assetData.Type == data.Type &&
                    assetData.Name.Equals(data.Name, StringComparison.OrdinalIgnoreCase))
                {
                    _data.RemoveAt(i);
                    break;
                }
            }


            for (int i = _data.Count - 1; i >= 0; --i)
            {
                if (_data[i].Priority <= assetData.Priority)
                {
                    _data.Insert(i + 1, assetData);
                    return;
                }
            }

            _data.Insert(0, assetData);
        }