示例#1
0
        private void Update()
        {
            // clean out any unloaded bundles
            for (int i = mPendingAssetBundleUnloads.Count - 1; i >= 0; i--)
            {
                mLoadedAssets.Remove(mPendingAssetBundleUnloads[i]);
                mPendingAssetBundleUnloads.RemoveAt(i);
            }

            // update pending asset bundle loads
            for (int i = mPendingAssetBundleLoads.Count - 1; i >= 0; i--)
            {
                var pending = mPendingAssetBundleLoads[i];
                if (pending.request.isDone)
                {
                    AssetBundleStatus status = new AssetBundleStatus();
                    status.bundle   = pending.request.assetBundle;
                    status.type     = pending.type;
                    status.refcount = pending.type == AssetBundleLoadType.Dependency ? 1 : 0;
                    mLoadedAssets.Add(pending.request.assetBundle.name, status);
                    if (pending.type == AssetBundleLoadType.Manifest)
                    {
                        LoadAllFromAsset <AssetBundleManifest>(pending.request.assetBundle.name, delegate(Object[] o)
                        {
                            mManifest = o[0] as AssetBundleManifest;
                            state     = AssetBundleManagerState.Ready;
                        });
                    }
                    mPendingAssetBundleLoads.RemoveAt(i);
                }
            }

            if (Initialized() && mPendingAssetBundleLoads.Count == 0)
            {
                state = AssetBundleManagerState.Ready;
            }

            // update pending loads _from_ assetbundles
            for (int i = mPendingAssetBundleRequests.Count - 1; i >= 0; i--)
            {
                var pending = mPendingAssetBundleRequests[i];
                if (pending.request.isDone)
                {
                    pending.callback(pending.request.allAssets);
                    mPendingAssetBundleRequests.RemoveAt(i);
                }
            }

            if (state == AssetBundleManagerState.Ready)
            {
                for (int i = mDeferredAssetBundleLoads.Count - 1; i >= 0; i--)
                {
                    LoadAssetBundle(mDeferredAssetBundleLoads[i].bundle, mDeferredAssetBundleLoads[i].type);
                    mDeferredAssetBundleLoads.RemoveAt(i);
                }
            }
        }
示例#2
0
        public void UpdateAssetBundleStatus(IgnoreCaseString key, AssetBundleStatus status, bool and = false)
        {
            GameAssetBundle ab;

            if (GetAssetBundle(key, out ab))
            {
                if (and)
                {
                    ab.AssetStatus |= status;
                }
                else
                {
                    ab.AssetStatus = status;
                }

                UpdateAssetBundle(key, ref ab);
            }
        }
示例#3
0
        public void AddObjectRef(ref GameAssetBundle gameAssetBundle)
        {
            if (ObjectReferences == null)
            {
                ObjectReferences = ListPool <string> .Get();
            }

            if (RefHistories == null)
            {
                RefHistories = ListPool <UserRefHistory> .Get();
            }

            if (AssetsList == null)
            {
                AssetsList = ListPool <AssetInfo> .Get();
            }

            AssetBundlename = gameAssetBundle.AssetBundleInfo.AssetBundleName;
            AssetBundleSize = gameAssetBundle.AssetBundleInfo.AssetSize;
            Status          = gameAssetBundle.AssetStatus;
            UserRefCount    = gameAssetBundle.UserReference;

            if (gameAssetBundle.References != null)
            {
                foreach (var weakobj in gameAssetBundle.References)
                {
                    if (weakobj != null && weakobj.IsAlive)
                    {
                        ObjectReferences.Add(GetPath(weakobj.Target as Object));
                    }
                }
            }

            if (gameAssetBundle.loadedAssets != null)
            {
                foreach (var item in gameAssetBundle.loadedAssets)
                {
                    var asset = item.Value;
                    if (asset != null)
                    {
                        long size = Profiler.GetRuntimeMemorySizeLong(asset);
                        LoadedSize += size;

                        AssetInfo info = new AssetInfo();
                        info.Size = size;
                        info.Path = GetPath(asset);

                        AssetsList.Add(info);
                    }
                }
            }

#if UNITY_EDITOR
            if (gameAssetBundle.history != null)
            {
                foreach (var historydata  in gameAssetBundle.history)
                {
                    RefHistories.Add(historydata);
                }
            }
#endif
        }
 public static bool ContainsEnum(this AssetBundleStatus md, AssetBundleStatus targetmd)
 {
     return((md & targetmd) != 0);
 }
 public static bool HasEnum(this AssetBundleStatus md, AssetBundleStatus targetmd)
 {
     return((md & targetmd) == targetmd);
 }
示例#6
0
 public bool IsStatus(ref AssetBundleContext context, out GameAssetBundle assetBundle, AssetBundleStatus status)
 {
     if (context.Cache.GetAssetBundle(AssetBundleName, out assetBundle))
     {
         if (assetBundle.AssetStatus.ContainsEnum(status))
         {
             return(true);
         }
         else if (SubTasks != null && SubTasks.Count > 0)
         {
             for (int i = 0; i < SubTasks.Count; i++)
             {
                 if (SubTasks[i].IsStatus(ref context, status))
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
示例#7
0
        public bool IsStatus(ref AssetBundleContext context, AssetBundleStatus status)
        {
            GameAssetBundle assetBundle;

            return(IsStatus(ref context, out assetBundle, status));
        }
示例#8
0
 public void UpdateAssetBundleStatus(string key, AssetBundleStatus status, bool and = false)
 {
     UpdateAssetBundleStatus(new IgnoreCaseString(key), status, and);
 }