Example #1
0
        public void UnloadAssets(bool unloadAll)
        {
            //TODO:这里有死循环,明日来后要查一查!!!!!!!!!!
            Dictionary <string, int> safeCount = new Dictionary <string, int>();

            while (mRecyAssets.Count > 0)
            {
                AssetData asset = mRecyAssets[0];
                mRecyAssets.RemoveAt(0);
                if (asset == null)
                {
                    continue;
                }

                AssetAssociate aa = GetAssociate(asset.url);
                if (aa != null && aa.HasAssociateInMemory)
                {
                    int nCount = 0;
                    safeCount.TryGetValue(asset.url, out nCount);
                    if (nCount < 5)
                    {
                        //确保资源删除时,被访问不要超过5次,5次遍历列表失败,此资源强制删除
                        mRecyAssets.Add(asset);
                        if (safeCount.ContainsKey(asset.url))
                        {
                            safeCount[asset.url]++;
                        }
                        else
                        {
                            safeCount.Add(asset.url, 1);
                        }
                        continue;
                    }
                }
                if (asset != null && !asset.IsUnLoaded)
                {
                    ChangeAssetState(asset, false);
                    asset.UnLoad(true);
                    mAssetInMemory.Remove(asset.url);
                    mRecycleLookUP.Remove(asset.url);
                }
            }
        }