Esempio n. 1
0
        public void ReleaseCurAssetCat()
        {
            if (curAssetCat != null)
            {
                if (!curAssetCat.IsLoadSuccess())
                {
                    curAssetCat.RemoveCallback(this);
                }
                curAssetCat.SubRefCount(1, true);
            }

            curAssetPath = null;
            curAssetCat  = null;
        }
Esempio n. 2
0
 public void CancelLoadAllCallback(AssetCat assetCat)
 {
     foreach (var keyValue in assetCatDict[assetCat])
     {
         var callbackCause = keyValue.Value;
         if (callbackCause.Equals(NullUtil.GetDefaultString()))
         {
             this.resLoad.CancelLoadCallback(assetCat, null);
         }
         else
         {
             this.resLoad.CancelLoadCallback(assetCat, callbackCause);
         }
     }
     assetCatDict.Remove(assetCat);
 }
Esempio n. 3
0
        public void CancelLoadAllCallback(AssetCat assetCat)
        {
            if (!assetCatDict.ContainsKey(assetCat))
            {
                return;
            }
            foreach (var keyValue1 in assetCatDict)
            {
                var callbackCauseDict = keyValue1.Value;
                foreach (var keyValue2 in callbackCauseDict)
                {
                    var callbackCause = keyValue2.Key;
                    resLoadComponent.CancelLoadCallback(assetCat, callbackCause.GetNullableKey());
                }
            }

            assetCatDict.Remove(assetCat);
        }
Esempio n. 4
0
        private bool __UnLoadUnUseAsset(AssetCat assetCat)
        {
            if (assetCat == null)
            {
                return(false);
            }
            if (!IsAssetLoadSuccess(assetCat.assetPath))
            {
                return(false);
            }

            if (assetCat.refCount == 0)
            {
                __RemoveAssetCat(assetCat);
                return(true);
            }

            return(false);
        }
Esempio n. 5
0
        private void __RemoveAssetCat(AssetCat assetCat)
        {
            if (assetCat == null)
            {
                return;
            }
            assetCatDict.RemoveByFunc((key, value) => value == assetCat);
            if (Application.isEditor && EditorModeConst.IsEditorMode ||
                assetCat.assetPath.Contains(FilePathConst.ResourcesFlag)
                )
            {
                return;
            }
            var assetBundleCat = assetCat.assetBundleCat;

            //assetBundle_name的dependencies的引用-1
            assetBundleCat?.SubRefCountOfDependencies();
            //减少一个assetBundle对asset的引用
            assetBundleCat?.SubRefCount();
        }
Esempio n. 6
0
        // 加载某个资源
        public AssetCat GetOrLoadAsset(string assetPath, Action <AssetCat> onLoadSuccessCallback = null,
                                       Action <AssetCat> onLoadFailCallback = null,
                                       Action <AssetCat> onLoadDoneCallback = null, object callbackCause = null)
        {
            AssetCat assetCat;

            if (!Application.isPlaying)
            {
#if UNITY_EDITOR
                Object obj = AssetDatabase.LoadAssetAtPath <Object>(assetPath);
                if (!resLoadDataInfoDict.ContainsKey(assetPath.GetMainAssetPath()))
                {
                    assetCat = new AssetCat(assetPath);
                    resLoadDataInfoDict[assetPath.GetMainAssetPath()] = new ResLoadDataInfo(new ResLoadData(assetCat), isNotCheckDestroy);
                }

                var resLoadDataInfo = resLoadDataInfoDict[assetPath.GetMainAssetPath()];
                if (!resLoadDataInfo.resLoadData.assetCat.assetDict.ContainsKey(obj.name))
                {
                    resLoadDataInfo.resLoadData.assetCat.assetDict[obj.name] = new Dictionary <Type, Object>();
                }
                if (!resLoadDataInfo.resLoadData.assetCat.assetDict[obj.name].ContainsKey(obj.GetType()))
                {
                    resLoadDataInfo.resLoadData.assetCat.assetDict[obj.name][obj.GetType()] = obj;
                }
                onLoadSuccessCallback?.Invoke(resLoadDataInfo.resLoadData.assetCat);
                onLoadDoneCallback?.Invoke(resLoadDataInfo.resLoadData.assetCat);
                return(resLoadDataInfo.resLoadData.assetCat);
#endif
            }
            callbackCause = callbackCause ?? this;
            assetCat      =
                Client.instance.assetBundleManager.GetOrLoadAssetCat(assetPath.GetMainAssetPath(), onLoadSuccessCallback,
                                                                     onLoadFailCallback, onLoadDoneCallback, callbackCause);
            if (!resLoadDataInfoDict.ContainsKey(assetPath.GetMainAssetPath()))
            {
                resLoadDataInfoDict[assetPath.GetMainAssetPath()] = new ResLoadDataInfo(new ResLoadData(assetCat), isNotCheckDestroy);
            }
            resLoadDataInfoDict[assetPath.GetMainAssetPath()].AddCallbackCause(callbackCause);
            return(assetCat);
        }
Esempio n. 7
0
        public void CancelLoadAllCallbacks(AssetCat assetCat)
        {
            string toRemoveKey = null;

            foreach (var keyValue in resLoadDataInfoDict)
            {
                var key             = keyValue.Key;
                var resLoadDataInfo = resLoadDataInfoDict[key];
                if (resLoadDataInfo.resLoadData.assetCat == assetCat)
                {
                    resLoadDataInfo.RemoveAllCallbackCauses();
                    if (resLoadDataInfo.callbackCauseDict.Count == 0 && !isNotCheckDestroy)                    //is_not_check_destroy的时候不删除,因为要在destroy的时候作为删除的asset的依据
                    {
                        toRemoveKey = key;
                    }
                    break;
                }
            }
            if (toRemoveKey != null)
            {
                resLoadDataInfoDict.Remove(toRemoveKey);
            }
        }
Esempio n. 8
0
        private AssetCat __GetOrAddAssetCat(string assetPath)
        {
            assetCatDict.TryGetValue(assetPath, out var targetAssetCat);

            //编辑器模式下的或者是resouce模式下的,没有找到则创建一个AssetCat
            if (Application.isEditor && EditorModeConst.IsEditorMode ||
                assetPath.Contains(FilePathConst.ResourcesFlag)
                )
            {
                Object[] assets = null;
                if (assetPath.Contains(FilePathConst.ResourcesFlag))
                {
                    var resourcePath = assetPath.Substring(assetPath.IndexEndOf(FilePathConst.ResourcesFlag) + 1)
                                       .GetMainAssetPath().WithoutSuffix();
                    assets = Resources.LoadAll(resourcePath);
                }
                else
                {
#if UNITY_EDITOR
                    assets = AssetDatabase.LoadAllAssetsAtPath(assetPath);
#endif
                }

                if (!assets.IsNullOrEmpty())                 //有该资源
                {
                    targetAssetCat = new AssetCat(assetPath);
                    targetAssetCat.SetAssets(assets);
                    assetCatDict[assetPath] = targetAssetCat;
                }
                else
                {
                    return(null);
                }
            }

            return(targetAssetCat);
        }
Esempio n. 9
0
        public BaseAssetAsyncLoader LoadAssetAsync(string assetPath, Action <AssetCat> onLoadSuccessCallback = null,
                                                   Action <AssetCat> onLoadFailCallback = null, Action <AssetCat> onLoadDoneCallback = null,
                                                   object callbackCause = null)
        {
            AssetCat assetCat;

            if (Application.isEditor && EditorModeConst.IsEditorMode ||
                assetPath.Contains(FilePathConst.ResourcesFlag)
                )
            {
                assetCat = __GetOrAddAssetCat(assetPath);
                onLoadSuccessCallback?.Invoke(assetCat);
                onLoadDoneCallback?.Invoke(assetCat);
                return(new EditorAssetAsyncLoader(assetCat));
            }

            var assetBundleName = assetPathMap.GetAssetBundleName(assetPath);

            if (assetBundleName == null)
            {
                LogCat.error(string.Format("{0}没有设置成ab包", assetPath));
            }

            if (assetCatDict.ContainsKey(assetPath))
            {
                assetCat = GetAssetCat(assetPath);
                //已经加载成功
                if (assetCat.IsLoadSuccess())
                {
                    onLoadSuccessCallback?.Invoke(assetCat);
                    onLoadDoneCallback?.Invoke(assetCat);
                    return(null);
                }

                //加载中
                assetCat.AddOnLoadSuccessCallback(onLoadSuccessCallback, callbackCause);
                assetCat.AddOnLoadFailCallback(onLoadFailCallback, callbackCause);
                assetCat.AddOnLoadDoneCallback(onLoadDoneCallback, callbackCause);
                return(assetAsyncloaderProcessingList.Find(assetAsyncloader =>
                                                           assetAsyncloader.assetCat.assetPath.Equals(assetPath)));
            }

            //没有加载
            var assetAsyncLoader = PoolCatManagerUtil.Spawn <AssetAsyncLoader>();

            assetCat = new AssetCat(assetPath);
            __AddAssetCat(assetPath, assetCat);
            //添加对assetAsyncLoader的引用
            assetCat.AddRefCount();
            assetCat.AddOnLoadSuccessCallback(onLoadSuccessCallback, callbackCause);
            assetCat.AddOnLoadFailCallback(onLoadFailCallback, callbackCause);
            assetCat.AddOnLoadDoneCallback(onLoadDoneCallback, callbackCause);

            var assetBundleLoader = __LoadAssetBundleAsync(assetBundleName);

            assetAsyncLoader.Init(assetCat, assetBundleLoader);
            //asset拥有对assetBundle的引用
            var assetBundleCat = assetBundleLoader.assetBundleCat;

            assetBundleCat.AddRefCount();

            assetCat.assetBundleCat = assetBundleCat;

            assetAsyncloaderProcessingList.Add(assetAsyncLoader);
            return(assetAsyncLoader);
        }
Esempio n. 10
0
        protected static void Set <TargetComponent_AssetObjectType>(TargetComponent component, AssetCat assetCat,
                                                                    string assetPath) where TargetComponent_AssetObjectType : AutoAssetRelease <TargetComponent, AssetObjectType>
        {
            if (component == null || assetCat == null)
            {
                return;
            }

            var ai = component.GetComponent <TargetComponent_AssetObjectType>();

            if (ai != null)
            {
                ai.ReleaseAll();
            }
            else
            {
                ai = component.gameObject.AddComponent <TargetComponent_AssetObjectType>();
            }

            ai.SetCurAssetCat(assetCat, assetPath);
            assetCat.AddRefCount();
        }
Esempio n. 11
0
 public static void SetAssetCat(AssetCat assetCat, Object[] assets)
 {
 }
Esempio n. 12
0
 public ResLoadData(AssetCat assetCat)
 {
     this.assetCat = assetCat;
     assetCat.AddRefCount();
 }
Esempio n. 13
0
 public void SetPreAssetCat(AssetCat preAssetCat, string preAssetPath)
 {
     this.preAssetCat  = preAssetCat;
     this.preAssetPath = preAssetPath;
 }
Esempio n. 14
0
 public void CancelLoadCallback(AssetCat assetCat, object callbackCause = null)
 {
     this.resLoadComponent.CancelLoadCallback(assetCat, callbackCause);
     __RemoveFromAssetCatDict(assetCat, callbackCause);
 }
Esempio n. 15
0
 public void CancelLoadAllCallbacks(AssetCat assetCat)
 {
     this.resLoad.CancelLoadAllCallbacks(assetCat);
 }
Esempio n. 16
0
 public void CancelLoadCallback(AssetCat assetCat, object callbackCause = null)
 {
     this.resLoad.CancelLoadCallback(assetCat, callbackCause);
 }
Esempio n. 17
0
 protected override void _Destroy()
 {
     base._Destroy();
     assetCat = null;
 }
Esempio n. 18
0
 private void __AddAssetCat(string assetPath, AssetCat asset)
 {
     assetCatDict[assetPath] = asset;
 }
Esempio n. 19
0
 void __AddToAssetCatDict(AssetCat assetCat, object callbackCause)
 {
     assetCatDict.GetOrAddDefault(assetCat, () => new Dictionary <object, bool>())[callbackCause.GetNotNullKey()]
         =
             true;
 }
Esempio n. 20
0
 public void SetCurAssetCat(AssetCat curAssetCat, string curAssetPath)
 {
     this.curAssetCat  = curAssetCat;
     this.curAssetPath = curAssetPath;
 }
Esempio n. 21
0
		/// <summary>
		///   只能通过这个方法添加
		/// </summary>
		/// <param name="go"></param>
		/// <param name="assetCat"></param>
		public static void Add(GameObject go, AssetCat assetCat)
		{
			assetCat.AddRefCount();
			var autoAssetDestroy = go.AddComponent<AutoAssetDestroy>();
			autoAssetDestroy.assetCat = assetCat;
		}