示例#1
0
        public static IEnumerator UnLoadUnused()
        {
            //        if (ResManager.Instance.pattern == ResManager.Pattern.AssetBundle)
            //        {
            //            if (m_AssetBundleManifest != null)
            //            {

            //                var listloading  = new Dictionary<string, LoadedAssetBundle>();

            //                foreach (LoadedAssetBundle ab in Instance.loadedAssetBundles.Values)
            //                {

            //                    if (ab.loaded)//caohanzhi 防异步加载时候还没完成就被清楚,导致内存的ab没释放
            //                    {
            //#if UNITY_EDITOR
            //                        Debug.LogError("UnLoadUnused " + ab.assetbundlename +"  ref = " + ab.m_ReferencedCount);
            //                        m_instance.watches.Remove(ab);
            //#endif
            //                        string []scenepaths = ab.m_AssetBundle.GetAllScenePaths();
            //                        foreach (var k in scenepaths)
            //                        {
            //                            Debug.Log(k);
            //                        }
            //                        ab.UnLoad(true);
            //                    }
            //                    else
            //                    {
            //#if UNITY_EDITOR
            //                        Debug.LogError("这个意料之外的 " + ab.assetbundlename + "  ref = " + ab.m_ReferencedCount);
            //                        listloading.Add(ab.assetbundlename, ab);
            //#endif
            //                    }

            //                }


            //                Instance.loadedAssetBundles = listloading;


            //                if (!string.IsNullOrEmpty(AssetScene.Current.assetBundleName))
            //                {
            //                    ABsManager.Unload(AssetScene.Current.assetBundleName);
            //                }
            //            }

            //            objMap.Clear();
            //            yield return null;
            AssetBundleUser.GetInstance().Clear();
            yield return(null);

            Resources.UnloadUnusedAssets();
            yield return(null);

            //}
        }
示例#2
0
            public GameObject Generate()
            {
                string assetName = string.Format("{0}", AssetBundleAssetRecord.GetAssetName(path));

                UnityEngine.Object obj = m_instance.loadedAssetBundles[assetBundleName].GetRes(assetName);

                if (obj != null)
                {
                    GameObject go = GameObject.Instantiate(obj) as GameObject;
                    AssetBundleUser.GetInstance().SetBundle(assetBundleName, go);
                    return(go);
                }
                return(null);
            }
示例#3
0
 public static void AddABUser(Object o, string path, ObjectState.State state = ObjectState.State.Normal)
 {
     if (ResManager.Instance.m_pattern == ResManager.Pattern.AssetBundle)
     {
         string assetBundleName = ConvertResToABPath(path);
         if (!string.IsNullOrEmpty(assetBundleName))
         {
             AssetBundleUser.GetInstance().SetBundle(assetBundleName, o, state);
         }
         else
         {
             Debug.LogError("error add ab user = " + path);
         }
     }
 }
示例#4
0
 public static AssetBundleUser GetInstance()
 {
     if (instance != null)
     {
         return(instance);
     }
     else
     {
         GameObject go = new GameObject("assetbundle");
         DontDestroyOnLoad(go);
         instance = go.AddComponent <AssetBundleUser>();
         instance.list.AddRange(lastSceneRemains);
         lastSceneRemains.Clear();
         return(instance);
     }
 }