Esempio n. 1
0
        /// <summary>
        /// 资源引用数减少(该资源的依赖也会减少)
        /// </summary>
        /// <param name="path"></param>
        public void DestoryAssetsCounter(string path)
        {
            if (assetsCaches.ContainsKey(path))
            {
                AssetsData assets = assetsCaches[path];
                assets.refCount--;
                if (assets.refCount < 0)
                {
                    Debug.LogError("资源引用计数错误:(" + assets.refCount + ") " + assets.assetPath);
                    assets.refCount = 0;
                }
                if (assets.refCount <= 0)
                {
                    AssetsUnloadHandler.DiscardAssets(assets);
                }

                string[] dependenciesNames = loader.GetAllDependenciesName(path);
                //Debug.LogWarning("DestoryAssets:" + name + "=>" + string.Join("\n", dependenciesNames));
                foreach (var item in dependenciesNames)
                {
                    DestoryAssetsCounter(item);
                }
            }
            else
            {
                if (m_useCache)
                {
                    Debug.LogError("未加载资源,不能Destroy :" + path);
                }
            }
        }
Esempio n. 2
0
        public AssetsData LoadAssetsLogic(string path, CallBackR <bool> checkContainsAssets, CallBackR <AssetsData, string> loadMethod)
        {
            LoadAssetsDependencie(path);
            AssetsData assets = null;

            if (checkContainsAssets())
            {
                assets = assetsCaches[path];
            }
            else
            {
                assets = loadMethod(path);
                if (assets == null)
                {
                    Debug.LogError("资源加载失败:" + path);
                    return(assets);
                }
                else
                {
                    if (assetsCaches.ContainsKey(path))
                    {
                        List <Object> asList = new List <Object>(assetsCaches[path].Assets);
                        foreach (var item in assets.Assets)
                        {
                            if (!asList.Contains(item))
                            {
                                asList.Add(item);
                            }
                        }
                        assetsCaches[path].Assets = asList.ToArray();
                        assets = assetsCaches[path];
                    }
                    else
                    {
                        if (m_useCache)
                        {
                            assetsCaches.Add(path, assets);
                        }
                    }
                }
            }
            if (m_useCache)
            {
                assets.refCount++;
                AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path));
            }
            return(assets);
        }
Esempio n. 3
0
        /// <summary>
        /// 根据名字创建对象
        /// </summary>
        /// <param name="key"></param>
        /// <param name="position"></param>
        /// <param name="rotation"></param>
        /// <returns></returns>
        public GameObject CreateObject(string key, Vector3 position, Quaternion rotation)
        {
            GameObject go = FindUsableObject(key);

            if (go == null)
            {
                go = AddObject(key);
            }


            if (go == null)
            {
                Debug.LogError("GameObjectPool 加载失败:" + name);
                return(go);
            }

            AssetsUnloadHandler.MarkUseAssets(name);

            UseObject(position, rotation, go);

            return(go);
        }
Esempio n. 4
0
        /// <summary>
        /// 异步加载资源逻辑
        /// </summary>
        /// <param name="path"></param>
        /// <param name="assetType"></param>
        /// <param name="callBack"></param>
        /// <returns></returns>
        private IEnumerator LoadAssetsIEnumerator(string path, System.Type assetType, CallBack <Object> callBack)
        {
            yield return(LoadAssetsIDependencieEnumerator(path));

            if (assetsCaches.ContainsKey(path))
            {
                AssetsData assets = assetsCaches[path];
                if (m_useCache)
                {
                    assets.refCount++;
                    AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path));
                }
                if (callBack != null)
                {
                    callBack(assets.Assets[0]);
                }
            }
            else
            {
                yield return(loader.LoadAssetsIEnumerator(path, assetType, (assets) =>
                {
                    if (m_useCache)
                    {
                        assetsCaches.Add(path, assets);
                    }
                    if (m_useCache)
                    {
                        assets.refCount++;
                        AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path));
                    }
                    if (callBack != null)
                    {
                        callBack(assets.Assets[0]);
                    }
                }));
            }
            yield return(0);
        }